.htaccess 301 仅针对特定 IP 地址重定向



请帮忙,我已经努力了,但它就是不起作用。

我试图完成的只是将我们公司网络中的所有用户(所有用户都具有相同的外部 IP 地址,例如 192.168.0.1(重定向到 http://start.example.com/page_2 当他们访问 http://start.example.com/page_1 时。所有其他 IP 地址应该都可以访问 http://start.example.com/page_1。

我尝试了以下 2 条规则:

1:

RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^192.168.0.1$
Redirect 301 /page_1  http://start.example.com/page_2

在这种情况下,重定向仅在禁用 ip 检查时有效。

阿拉伯数字:

RewriteEngine On
RewriteBase / 
RewriteCond %{REMOTE_ADDR} ^192.168.0.1$
RewriteCond %{REQUEST_URI} !^page_2$
RewriteRule .* http://start.example.com/page_2 [R=301,L,NC]

在这种情况下,重定向仅在禁用路径检查时有效。

怎么了?

Oké,找到了解决方案,不知何故重定向的位置不起作用,我将其移动到文档顶部,现在它使用以下语法工作。在示例中,我添加了一个额外的 IP 检查和一个用户代理"Windows"检查。

RewriteEngine On
RewriteBase / 
RewriteCond %{REMOTE_ADDR} ^192.168.0.1$ [NC,OR]
RewriteCond %{REMOTE_ADDR} ^192.168.1.1$ [NC]
RewriteCond %{HTTP_USER_AGENT} Windows
RewriteRule page_1$ http://start.example.com/page_2 [R,L,NC]

第一个是来自mod_rewrite和Redirect来自mod_alias的两个不相关的RewriteCond指令的混合。RewriteCond没有关联的RewriteRule

第二个不起作用,因为REQUEST_URI总是包含前导斜杠。适当的条件是

RewriteCond %{REQUEST_URI} !^/page_2$

该规则重写任何内容(.*(以page_2,而不仅仅是page_1。为了正确限制这一点,这应该是

RewriteRule ^page_1$ http://start.example.com/page_2 [R,L,NC]

如果有其他重定向,例如在末尾添加路径,条件也应该通过删除字符串标记的末尾来反映这一点$

RewriteCond %{REQUEST_URI} !^/page_2

这匹配以/page_2开头的任何内容。

您还可以从重定向中排除其他路径,用竖线分隔

RewriteCond %{REQUEST_URI} !^/(page_2|page_3)

最后,永远不要R=301进行测试!

最新更新