2

我已经尝试了无数来自论坛、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]

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

一点帮助?

4

2 回答 2

2

您可以使用Skip 标志 [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}了浏览器可以实际访问的请求部分。

于 2013-08-14T04:54:52.910 回答
0

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

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

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

    如果你去,http://website.com/foo你应该被重定向到一个不存在的网站,但在 URL 中有你的 IP。如果该 IP 不匹配,91.143.253.211则您需要更改条件以匹配正确的 IP。

于 2013-08-14T05:30:42.533 回答