apache httpd - RewriteCond SERVER_NAME不等于SERVER_ADDR

时间:2013-01-30 20:37:01

标签: http mod-rewrite apache

如果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,以便不会重定向用户?

1 个答案:

答案 0 :(得分:9)

您不能在RewriteCond的右侧使用服务器变量,因此您要匹配文字字符串"%{SERVER_ADDR}",而不是变量,因此,因为您的匹配被否定(“!”),规则总是匹配。

我认为你可以做这样的事情,虽然我自己从未使用过这种特殊的格式:

RewriteCond %{SERVER_NAME},%{SERVER_ADDR} ^(.*),\1

这个想法是你正在进行两场比赛 - 你将%{SERVER_NAME}与任何东西匹配(总是匹配)并捕获结果,然后将%{SERVER_ADDR}与第一场比赛的反向引用相匹配,是%{SERVER_NAME}的匹配。

同样,我没有使用像我这样的规则,只是阅读它,所以它可能需要一些调整。