【问题标题】:Want to redirect all visitors except for me想要重定向除我之外的所有访客
【发布时间】:2010-09-22 12:56:01
【问题描述】:

基本上我即将开始在一个网站上工作,我想要一些我可以添加到我的 .htaccess 文件(或其他地方)中的东西,它可以像这个伪代码一样工作:(我的 ip 将代替127.0.0.1)

if (visitors_ip <> 127.0.0.1)
    redirectmatch ^(.*)$ http://www.example.com/under-construction.html

希望这是有道理的......

【问题讨论】:

    标签: .htaccess http-status-code-302


    【解决方案1】:

    那就是something like:

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1
    
    RewriteCond %{REQUEST_URI} !/mypage\.html$  
    
    RewriteRule .* http://www.anothersite.com/mypage.html [R=302,L]
    

    正如Andrew 指出的那样,如果您重定向到同一个域,%{REQUEST_URI} 条件可以避免无限循环。

    作为Xorax cmets almost 9 years later:

    你不应该使用REMOTE_HOST,它在很多情况下会失败。你应该使用REMOTE_ADDR
    参照“difference between REMOTE_HOST and REMOTE_ADDR

    【讨论】:

    • 现在 IPv6 已经出现在图片中,我发现在某些情况下,本地主机 IP 地址以 ::1 的形式出现,并不总是 127.0.0.1 - 不完全确定何时以及为什么,但要处理这个问题,我认为你需要一个额外的条件:RewriteCond %{REMOTE_HOST} !^::1 冒号不应该需要转义——我不相信重写引擎正则表达式的特殊字符。
    • 你不应该使用REMOTE_HOST,在很多情况下它会失败。您应该使用 REMOTE_ADDR。 stackoverflow.com/questions/3812166/…
    • @Xorax 谢谢。我已经修改了我 9 年前的答案。
    【解决方案2】:

    这是我最终使用的解决方案,请注意它与 VonC 的类似,只是如果您选择重定向到同一个域,他会导致无限循环。

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REMOTE_HOST} !^127\.0\.0\.1
    RewriteCond %{REQUEST_URI} !/coming-soon\.html$ 
    RewriteRule .* http://www.andrewgjohnson.com/coming-soon.html [R=302,L]
    

    还需要注意的是,302是临时动作,应该使用而不是nothing或301。

    【讨论】:

    • 我刚刚在我的答案中添加了您的额外重写条件,以便彻底。
    【解决方案3】:
    <IfModule mod_rewrite.c>
    RewriteEngine On
    # Redirect all except allowed IP
    ReWriteCond %{REMOTE_ADDR} !^000\.000\.000\.001$
    RewriteCond %{REMOTE_ADDR} !000\.000\.000\.002$
    ReWriteCond %{REMOTE_ADDR} !^000\.000\.000\.003$
    RewriteRule (.*) http://YourOtherWebsite.com/$1 [R=301,L] 
    </IfModule>
    

    在你的 wordpress ifmodule 之前 这将重定向除有问题的 3 个 IP 地址之外的所有人。

    如果您的 IP 地址发生变化,您只需 ftp 到该站点并编辑 .htaccess 文件。

    【讨论】:

      【解决方案4】:

      小心这种方法。

      采用基于 IP 的方法限制访问,然后失去我的 IP 地址的租约,我已经被烧死了。

      当然,您总是可以通过 ssh 进入有问题的框并再次更改 .htaccess 文件,但是如果您没有预料到,那么在您试图弄清楚刚刚发生的事情时的 5 分钟恐慌并不是很有趣发生。

      我建议改为使用 .htaccess(结合 htpasswd 文件)来请求访问您的开发站点的凭据。

      一个很好的例子在这里:http://aplawrence.com/foo-web/htaccess-authentication.html

      【讨论】:

      • 谢谢,好点子,但我不会让这个队列超过一两个星期。
      • 根据您的网络设置方式,您的租用时间可能会比这短得多。
      猜你喜欢
      • 2014-10-26
      • 2012-09-05
      • 1970-01-01
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-22
      • 2021-05-01
      相关资源
      最近更新 更多