请帮助我努力但却无效。
我想要完成的只是将我们公司网络中的所有用户(都使用相同的外部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]
答案 0 :(得分:1)
第一个是来自RewriteCond
的两个不相关的指令mod_rewrite和来自Redirect
的mod_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
进行测试!