【问题标题】:.htaccess Redirect all users to subfolder EXCEPT for IP.htaccess 将所有用户重定向到子文件夹,IP 除外
【发布时间】:2015-04-16 05:27:10
【问题描述】:

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

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

帮助不大?

【问题讨论】:

    标签: html .htaccess redirect


    【解决方案1】:

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

    【讨论】:

    • @GregariousJB 您必须在某处进行另一个重定向。如果 .htaccess 文件中没有其他代码,请检查其他文件。此外,如果您使用的是博客之类的东西,它可能会内置重定向以到达默认文件夹。
    • 空白 .htaccess 接受您的代码。没有其他 .htaccess 文件。
    • @dcolumbus 你能在你的系统上检查一下吗?我已经更新了。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 感谢您的建议。我尝试清空缓存/cookie 无济于事。与谷歌搜索“ip”或访问“whatismyip.com”相比,您获取正确 IP 的过程似乎有点过分。我从 RewriteRule 得到的 IP 不同吗?
    • @GregariousJB 这取决于。如果您碰巧与您的网络服务器在同一台机器上,那么您获得的 IP 可能是 localhost。如果您的网络服务器与您的机器位于 LAN 上,则您可能会获得内部 IP 而不是外部 IP。使用该规则可确保您看到 mod_rewrite 将匹配的确切 IP
    猜你喜欢
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    相关资源
    最近更新 更多