【问题标题】:Only allow certain IP addresses to access site with mod_rewrite?只允许某些 IP 地址使用 mod_rewrite 访问站点?
【发布时间】:2023-03-15 18:12:01
【问题描述】:

我们的网站上有一个目录,我们只希望几个 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而有所不同。可能出了什么问题?

我知道这会带来安全问题,因为引荐来源网址可能会被欺骗,但我们很快会提出更好的解决方案,这只是临时措施。

【问题讨论】:

  • 你用的是同一个浏览器吗?您没有在浏览器地址栏中输入站点 URL 吗? (那么引用者将为空)
  • 我尝试了新的浏览器以确保它不是缓存问题。它应该可以直接在新的浏览器窗口中输入 URL。它适用于其中一个 IP 地址。仅当没有 IP 匹配时才需要引荐来源网址。因此,如果它们是(不是来自 IP1,也不是来自 IP2,也不是来自 IP3 ......并且推荐人不是来自 x 站点,那么摆脱它们)。

标签: redirect mod-rewrite ip block whitelist


【解决方案1】:

忘记发布这个问题的答案了。最后只是一个错字.. 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]

【讨论】:

    【解决方案2】:

    我猜你应该在每个 RewriteCond 之后添加 [OR] 修饰符,如下所示:

    RewriteEngine on
    RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123 [OR]
    RewriteCond %{REMOTE_ADDR} !^124\.124\.124\.124 [OR]
    ...
    

    【讨论】:

    • 这是错误的 - 仔细考虑。使用[OR] 逻辑,规则将始终匹配,因为 IP 将始终列表中的其中之一 - 因此每个人都将被重定向,而不管他们的 IP。
    • 如果您将 IP 列入白名单,则可以使用“OR”,而不是将其列入黑名单 :-)
    猜你喜欢
    • 2012-08-03
    • 2011-01-09
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    相关资源
    最近更新 更多