我们的网站上有一个目录,我们只想通过几个IP地址访问。所以我们有这个.htaccess文件试着让它运行起来:
RewriteEngine on
RewriteCond %(REMOTE_ADDR) !^123\.123\.123\.123
RewriteCond %(REMOTE_ADDR) !^124\.124\.124\.124
RewriteCond %{REMOTE_ADDR} !^125\.125\.125\.125
RewriteCond %{REMOTE_ADDR} !^126\.126\.126\.126
RewriteCond %{REMOTE_ADDR} !^127\.127\.127\.127
RewriteCond %{REMOTE_ADDR} !^128\.128\.128\.128
RewriteCond %{HTTP_REFERER} !^http://www\.example\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^http://example\.com/ [NC]
RewriteRule ^.*$ http://www.example.com [R=301,L]
我们希望它做的是,如果请求不是来自我们的某个IP地址(显然在上面的代码中为了示例而改变了它们),或者引用者不是来自特定站点,那么重定向他们在其他地方。
出于某些奇怪的原因,它适用于位于126.126.126.126
位置的IP,但不适用于其他IP。真的无法弄清楚为什么它会有所不同取决于IP。可能出现什么问题?
我知道这会带来安全问题,因为推荐人可能会被欺骗,但我们很快就会提出更好的解决方案,这只是一个临时措施。
答案 0 :(得分:15)
忘了发布答案。这到底只是一个错字.. DOH!
如果你注意到,一些%{REMOTE_ADDR}行有大括号,有些行有正常括号!他们都需要卷曲的。
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123
RewriteCond %{REMOTE_ADDR} !^124\.124\.124\.124
RewriteCond %{REMOTE_ADDR} !^125\.125\.125\.125
RewriteCond %{REMOTE_ADDR} !^126\.126\.126\.126
RewriteCond %{REMOTE_ADDR} !^127\.127\.127\.127
RewriteCond %{REMOTE_ADDR} !^128\.128\.128\.128
RewriteCond %{HTTP_REFERER} !^http://www\.example\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^http://example\.com/ [NC]
RewriteRule ^.*$ http://www.example.com [R=301,L]
答案 1 :(得分:0)
我猜你应该在每个RewriteCond之后添加[OR]修饰符,如下所示:
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123 [OR]
RewriteCond %{REMOTE_ADDR} !^124\.124\.124\.124 [OR]
...