【问题标题】:.htaccess path only accessible by ip.htaccess 路径只能通过 ip 访问
【发布时间】:2016-08-17 16:37:20
【问题描述】:

我想使用 .htaccess 配置阻止来自我的站点的路径。这个想法是只有一组特定的 IP 可以从 URL 访问该特定路径。

注意:这是一个路径,而不是页面或目录。我们正在尝试屏蔽 Web 服务,因此只有对 URL 的 post 调用。

我希望阻止 URL example.com/rest 以及基于 IP 的 URL 后面的所有内容。所以example.com/rest/test_serviceexample.com/rest/test_service/read应该被屏蔽。

来自应用程序的所有其他路径应保持正常运行。

我尝试了以下方法,但似乎不起作用。没有一个页面可以像这样访问。

SetEnvIf Request_URI "/rest$" rest_uri

<RequireAll>
    Require env rest_uri
    <RequireAny>
        Require ip XXX.XXX.XXX.XXX
    </RequireAny>
</RequireAll>

我尝试了不同的方法,但它们似乎都不起作用。任何帮助表示赞赏。

【问题讨论】:

    标签: php .htaccess drupal-7


    【解决方案1】:

    你可以使用 mod rewrite 来允许一个 spacific ip 地址

    RewriteEngine on 
    RewriteCond %{REMOTE_ADDR} !YourIP$
    RewriteRule ^/?rest - [F]
    

    如果访问 /rest 或 /rest/foobar,这将为所有其他 IP 地址返回 403 禁止错误。

    【讨论】:

    • 我可以使用多行RewriteCond %{REMOTE_ADDR} !YourIP$ 来允许更多的IP?我可以使用这样的范围:RewriteCond %{REMOTE_ADDR} !XXX.XXX.XXX.XXX/24$
    • 不,ip 范围不能用于 mod rewrite。你可以使用多个rewriteConditions来允许更多的ips。
    【解决方案2】:

    您可以使用这样的指令来允许特定 URL 的 IP 范围:

    # set env variable if URL is /rest or /rest/
    SetEnvIf Request_URI "/rest(/.*)?$" rest_uri
    
    Order deny,allow
    
    # first deny all
    Deny from all
    
    # then allow if env var is not set
    Allow from env=!rest_uri
    
    # also allow your IP range
    Allow from 10.1.0.0/16
    

    【讨论】:

    • 这确实适用于 URL /rest 和 /rest/ 但它仍然允许我访问 /rest/foo/bar
    • 我在发布之前已经测试过这个解决方案,所以我仍然怀疑你没有使用正确的 IP。
    • 所以检查apache日志,当访问主页时,日志中的IP匹配。但是当访问 rest 时,会记录一个不同的 IP。我们怀疑这是负载均衡器的问题,正在进一步调查。但是,您的解决方案确实有效,因为我们使用此战略 IP 对其进行了测试。
    • 在咨询了我们的托管服务后现已解决。谢谢
    • 我很高兴得知它终于为你工作了。这确实是一个有点棘手的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 2011-07-17
    • 2011-06-29
    • 2021-09-12
    • 2016-08-09
    • 2013-11-15
    • 2018-03-05
    相关资源
    最近更新 更多