.htaccess将所有用户重定向到子文件夹EXCEPT for IP

时间:2013-08-14 04:46:40

标签: html .htaccess redirect

我尝试了无数的论坛组合,Stack Overflow上的答案和博客。我无法正常工作。

我想将所有用户重定向到子目录 - “/ const” - 除了我认为值得的IP。

这是我到目前为止所使用的:

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^91\.143\.253\.211
RewriteCond %{REQUEST_URI} !^/const/ [NC]
RewriteRule ^(.*)$ http://website.com/const/$1 [R=302,L]

它正确地重定向到子文件夹,但它仍然重定向我,这很糟糕。

很少帮忙?

2 个答案:

答案 0 :(得分:2)

您可以使用Skip flag [s]。这是一个包含多个IP的示例。

RewriteEngine on
RewriteBase /

RewriteCond %{REMOTE_ADDR} ^91\.143\.253\.211$ [OR]
RewriteCond %{REMOTE_ADDR} ^8\.8\.8\.8$
RewriteRule .? - [S=1]

RewriteCond %{REQUEST_URI} !^const [NC]
RewriteRule ^(.*)$ /const/$1 [R=302,L]

注意

在我有%{REQUEST_FILENAME}之前的例子中。这通常仅适用于服务器配置文件,其中文件名本身的路径对重定向脚本可见。在这里,我已将其更改为%{REQUEST_URI}浏览器实际可以访问的请求部分。

答案 1 :(得分:0)

您拥有的规则是正确的。当我将它们添加到空白的htaccess文件时,我会按预期重定向到http://website.com/const/,除非我将第一个条件更改为我的实际IP。你应该检查的一些事情:

  1. 确保已刷新浏览器的缓存。虽然不应该以这种方式缓存302重定向,但为了以防万一,最好将其刷新。
  2. 确保您实际上是从预期的IP(即^91\.143\.253\.211$)发出请求。您可以通过将此规则添加到htaccess文件的顶部来测试:

    RewriteRule ^foo$ http://foo.bar/IP/%{REMOTE_ADDR} [L,R]
    

    如果您转到http://website.com/foo,您应该被重定向到不存在的网站,但网址中包含您的IP。如果该IP与91.143.253.211不匹配,那么您需要更改条件以匹配正确的IP。