apache httpd - RewriteCond SERVER_NAME不等于SERVER_ADDR

ljo96ir5  于 12个月前  发布在  Apache
关注(0)|答案(1)|浏览(116)

如果SERVER_ADDRSERVER_NAME变量不匹配,我需要重定向用户。
我在httpd.conf文件中有以下规则:

RewriteEngine on
RewriteCond %{SERVER_NAME} !%{SERVER_ADDR}
RewriteRule .* /myRedirectPage.html [PT]

当SERVER_NAME和SERVER_ADDR不匹配时,我正确地重定向。但是,即使它们匹配,我也会被重定向。
如果我使用以下条件,它对匹配和非匹配场景都有效:(其中192.168.1.1是服务器IP)

RewriteCond %{SERVER_NAME} !192.168.1.1

为了检查变量是否匹配,我使用了PHP的$_SERVER['SERVER_NAME']$_SERVER['SERVER_ADDR']变量。
如果SERVER_NAMESERVER_ADDR匹配,我应该如何编写RewriteCond,使其不会重定向用户?

n3ipq98p

n3ipq98p1#

你不能在RewriteCond的右边使用服务器变量,所以你匹配的是文字字符串"%{SERVER_ADDR}",而不是变量,因此,因为你的匹配是否定的(“!“),则规则始终匹配。
我认为你可以这样做,尽管我自己从来没有使用过这种特殊的格式:

RewriteCond %{SERVER_NAME},%{SERVER_ADDR} ^([^,]*+),\1$

这个想法是你做两个匹配-你匹配%{SERVER_NAME}对任何东西(总是匹配)和捕获结果,然后匹配%{SERVER_ADDR}对第一个匹配的反向引用,这是%{SERVER_NAME}的匹配。
再说一次,我自己还没有使用过这样的规则,只是读了一下,所以它可能需要一些调整。

相关问题