如果
SERVER_ADDR
和 SERVER_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']
变量。
我应该如何编写 RewriteCond,以便在
SERVER_NAME
和 SERVER_ADDR
匹配时它不会重定向用户?
您不能在 RewriteCond 的右侧使用服务器变量,因此您要匹配文字字符串
"%{SERVER_ADDR}"
,而不是变量,因此,由于您的匹配被否定(“!”),因此规则始终匹配。
我认为你可以做这样的事情,尽管我自己从未使用过这种特定的格式:
RewriteCond %{SERVER_NAME},%{SERVER_ADDR} ^([^,]*+),\1$
这个想法是,你正在做两个匹配 - 你将
%{SERVER_NAME}
与任何东西匹配(总是匹配)并捕获结果,然后将 %{SERVER_ADDR}
与第一个匹配的反向引用匹配,这是 %{SERVER_NAME}
的匹配
.
再说一遍,我自己没有使用过这样的规则,只是阅读了它,所以它可能需要一些调整。