Проблема обнаружения пустого URI запроса с перезаписью Apache mod
Я запускаю Apache с правилом перенаправления следующим образом:
RewriteCond %{HTTP_HOST} ^1st-domain.com
RewriteRule ^(.*)$ http://2nd-domain.com [R=permanent,L]
это успешно перенаправляет http://1st-domain.com к http://2nd-domain.com Однако, когда REQUEST_URI пуст, я хочу перенаправить в третий домен.
RewriteCond %{HTTP_HOST} ^1st-domain.com$
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ http://3rd-domain.com [R=permanent,L]
но это не работает и вместо этого перенаправляет на 2nd-domain.com
мои правила упорядочены следующим образом:
RewriteCond %{HTTP_HOST} ^1st-domain.com$
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ http://3rd-domain.com [R=permanent,L]
RewriteCond %{HTTP_HOST} ^1st-domain.com
RewriteRule ^(.*)$ http://2nd-domain.com [R=permanent,L]
какие предложения? Спасибо продвижение.
обновление
- пустой REQUEST_URI: http:/1st-domain.com
- непустой REQUEST_URI:http://1st-domain.com/something
первое правило должно направлять пустой request_uri на 3rd-domain.com, второе правило должно направлять непустой request_uri на 2nd-domain.com
ПОЛЕЗНЫЙ ЛАКОМЫЙ КУСОЧЕК Вы можете включить mod_rewrite debug с этим фрагмент:
<IfModule mod_rewrite.c>
RewriteLog "/home/domain.com/logs/rewrite.log"
RewriteLogLevel 3
</IfModule>
очень полезная опция отладки я не знал.
8 ответов
Это должно работать:
RewriteCond %{HTTP_HOST} ^1st-domain\.com
RewriteRule ^$ http://3rd-domain.com [R=permanent,L]
RewriteCond %{HTTP_HOST} ^1st-domain\.com
RewriteRule ^(.+)$ http://2nd-domain.com/ [R=permanent,L]
надеюсь, что это помогает!
Примечание: REQUEST_URI немного отличается между httpd.conf and .htaccess, то он начинается с дополнительной обратной косой черты в httpd.conf. Это означает, что в файле httpd.conf первое правило перезаписи должно быть ^\/$
не только ^$
.
Я использую следующее, Чтобы поймать пустой REQUEST_URL:
RewriteEngine on
RewriteCond %{REQUEST_URI} "^/$"
RewriteRule ^(.*) http://%{HTTP_HOST}/my/another/url
Это должно работать:
RewriteCond %{HTTP_HOST} ^1st-domain\.com
RewriteRule ^(.*)$ http://2nd-domain.com [R=permanent,L]
RedirectMatch ^/$ http://3rd-domain.com
ваши правила перенаправляет запрос с пустым QUERY_STRING
.
для пустого request_uri вы можете использовать
RewriteCond %{HTTP_HOST} ^1st-domain\.com$
RewriteRule ^$ http://3rd-domain.com [R=permanent,L]
RewriteCond %{HTTP_HOST} ^1st-domain\.com
RewriteRule ^(.*)$ http://2nd-domain.com [R=permanent,L]
первое правило будет первый матч <empty>
, затем тестирует <non-empty or empty>
(который не может быть <empty>
теперь, так как мы обработали его раньше)
на мультисайтов редирект работает для меня пустой запрос :
RewriteCond %{HTTP_HOST} ^1st-domain\.com$
RewriteCond %{REQUEST_URI} "^/$"
RewriteRule ^$ http://3rd-domain.com/ [R=permanent,L]
Если запрос пуст, apache "перенаправляет" на индекс.html so-RewriteCond %{REQUEST_URI} index-может вам помочь.
я попробовал параметры, указанные на этой странице, все, что я хотел, это проверить, пуст ли REQUEST_URI (или в данном конкретном случае a /
):
# Check of the request uri is just 1 char long (checking for a slash was harder):
RewriteCond %{REQUEST_URI} ^.$
это сработало для меня:
RewriteCond %{HTTP_HOST} ^(www\.)?1st-domain\.com$
RewriteCond %{REQUEST_URI} ^/$
RewriteRule .* http://3rd-domain.com/ [L,R=permanent]
RewriteCond %{HTTP_HOST} ^.*$
RewriteRule .* http://2nd-domain.com%{REQUEST_URI} [L,R=permanent]
вычеркнуть кавычки из пустой проверки