我正在使用这样的重定向规则运行Apache:
RewriteCond %{HTTP_HOST} ^1st-domain\.com
RewriteRule ^(.*)$ http://2nd-domain.com$1 [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$1 [R=permanent,L]
但这不起作用,而是重定向到2nd-domain.com
我的规则是这样订购的:
RewriteCond %{HTTP_HOST} ^1st-domain\.com$
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ http://3rd-domain.com$1 [R=permanent,L]
RewriteCond %{HTTP_HOST} ^1st-domain\.com
RewriteRule ^(.*)$ http://2nd-domain.com$1 [R=permanent,L]
有什么建议吗?提前谢谢。
更新
第一条规则应该将空的request_uri指向3rd-domain.com,第二条规则应该将非空的request_uri指向2nd-domain.com
有用的TIDBIT 您可以使用以下代码段打开mod_rewrite调试:
<IfModule mod_rewrite.c>
RewriteLog "/home/domain.com/logs/rewrite.log"
RewriteLogLevel 3
</IfModule>
非常有用的调试选项我不知道。
答案 0 :(得分:9)
这应该有效:
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/$1 [R=permanent,L]
希望它有所帮助!
注意:httpd.conf和.htaccess之间的REQUEST_URI略有不同,它以httpd.conf中的额外反斜杠开头。这意味着在httpd.conf中,第一个重写规则应该是^\/$
,而不仅仅是^$
。
答案 1 :(得分:9)
我使用以下内容来捕获空的REQUEST_URL:
RewriteEngine on
RewriteCond %{REQUEST_URI} "^/$"
RewriteRule ^(.*) http://%{HTTP_HOST}/my/another/url
答案 2 :(得分:2)
这应该有效:
RewriteCond %{HTTP_HOST} ^1st-domain\.com
RewriteRule ^(.*)$ http://2nd-domain.com$1 [R=permanent,L]
RedirectMatch ^/$ http://3rd-domain.com
答案 3 :(得分:0)
您的规则会将请求重定向为空QUERY_STRING
。
对于空的request_uri,您可以使用
RewriteCond %{HTTP_HOST} ^1st-domain\.com$
RewriteRule ^$ http://3rd-domain.com$1 [R=permanent,L]
RewriteCond %{HTTP_HOST} ^1st-domain\.com
RewriteRule ^(.*)$ http://2nd-domain.com$1 [R=permanent,L]
第一条规则首先匹配<empty>
,然后测试<non-empty or empty>
(现在不能<empty>
,因为我们之前已经处理过了)
答案 4 :(得分:0)
在多站点上,这样的重定向适用于空请求:
RewriteCond %{HTTP_HOST} ^1st-domain\.com$
RewriteCond %{REQUEST_URI} "^/$"
RewriteRule ^$ http://3rd-domain.com/ [R=permanent,L]
答案 5 :(得分:0)
如果请求为空,则apache'重定向'到index.html,因此-RewriteCond%{REQUEST_URI}索引可能对您有帮助。
答案 6 :(得分:0)
我尝试了本页所述的选项,我想要的是检查REQUEST_URI是否为空(或者在这种特殊情况下是/
):
# Check of the request uri is just 1 char long (checking for a slash was harder):
RewriteCond %{REQUEST_URI} ^.$
答案 7 :(得分:0)
这对我有用:
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]
清空空验证
上的引号