请帮忙,我已经努力了,但它就是不起作用。
我试图完成的只是将我们公司网络中的所有用户(所有用户都具有相同的外部 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
进行测试!