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

时间:2017-07-26 14:16:05

标签: apache .htaccess redirect mod-rewrite

请帮助我努力但却无效。

我想要完成的只是将我们公司网络中的所有用户(都使用相同的外部IP地址,比方说192.168.0.1)重定向到htp://start.example.com/page_2,当他们访问htp时://start.example.com/page_1。所有其他IP地址应该可以访问htp://start.example.com/page_1。

我尝试过这两条规则:

1:

RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^192\.168\.0\.1$
Redirect 301 /page_1  http://start.example.com/page_2

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

2:

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]

1 个答案:

答案 0 :(得分:1)

第一个是来自RewriteCond的两个不相关的指令mod_rewrite和来自Redirectmod_alias的混合指针。 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进行测试!