使用Apache mod_rewrite检测空REQUEST_URI时出现问题

pch*_*10k 6 apache url mod-rewrite url-rewriting

我正在使用这样的重定向规则运行Apache:

RewriteCond %{HTTP_HOST} ^1st-domain\.com
RewriteRule ^(.*)$ http://2nd-domain.com$1 [R=permanent,L]
Run Code Online (Sandbox Code Playgroud)

这成功地将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]
Run Code Online (Sandbox Code Playgroud)

但这不起作用,而是重定向到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]
Run Code Online (Sandbox Code Playgroud)

有什么建议?先感谢您.

UPDATE

  1. 清空REQUEST_URI:http:/1st-domain.com
  2. 非空的REQUEST_URI:http: //1st-domain.com/something

第一条规则应该将空的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>
Run Code Online (Sandbox Code Playgroud)

非常有用的调试选项,我不知道.

小智 10

我使用以下内容来捕获空的REQUEST_URL:

RewriteEngine on

RewriteCond %{REQUEST_URI} "^/$"

RewriteRule ^(.*) http://%{HTTP_HOST}/my/another/url


sze*_*ian 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]
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!

注意:REQUEST_URI在httpd.conf和.htaccess之间略有不同,它以httpd.conf中的额外反斜杠开头.这意味着在httpd.conf中,第一个重写规则应该是^\/$,而不仅仅是^$.

  • 好的,我把它解决了,但你的答案非常接近.答:Apache永远不会返回一个空的request_uri,一个空的请求来自'/'所以我只是将第一个重写规则更改为^\/ $并且它有效! (3认同)