5

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

4

1 回答 1

9

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

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

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

这个想法是你正在做两个匹配 - 你正在匹配%{SERVER_NAME}任何东西(总是匹配)并捕获结果,然后匹配%{SERVER_ADDR}对第一个匹配的反向引用,这是%{SERVER_NAME}.

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

于 2013-01-30T22:49:17.423 回答