【发布时间】:2013-01-14 19:33:13
【问题描述】:
如果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'] 变量。
如果SERVER_NAME 和SERVER_ADDR 匹配,我应该如何编写 RewriteCond 以便它不会重定向用户?
【问题讨论】:
-
这有点令人困惑。
SERVER_ADDR(IP)和SERVER_NAME(名称)是识别同一域的两种方法。所以它们总是“匹配”,因为这些是服务器传递的变量。另一方面,一个是数字,另一个是字符串。你如何比较它们,即使是 PHP 代码? -
我使用
vardump($_SERVER)显示它们,但 php 将这两个值都标识为字符串。我正在制作一个强制门户,其中所有 tcp 流量都被重定向到服务器。例如,如果用户尝试访问http://www.google.com/,用户将被重定向到我的php页面,其中SERVER_ADDR=192.168.1.1和SERVER_NAME=www.google.com。 -
SERVER_NAME 是您在 HTTP Host 标头中的内容,当您使用 IP 而不是主机名时,您可以具有相同的值,在其他情况下,此值无法匹配。
标签: http mod-rewrite apache