如何仅允许网站根目录的某些 IP 和 URI 的特定子集的所有 IP?

如何仅允许网站根目录的某些 IP 和 URI 的特定子集的所有 IP?

我有一个受 IP 过滤器保护的网站Allow from,但有一个特定的 URL 子集我想对所有人开放。

dev.someweb.com应该只从特定的 IP 地址可用, dev.someweb.com/api/v1/<anything here>应该对所有人可用并且使用所有方法 - GET、POST 等。

这是我当前的 httpd.conf 示例:

    <VirtualHost *:80>
        DocumentRoot /home/webroot/devsite/public
        ServerName   dev.someweb.com
        <Directory /home/webroot/devsite/public>
            SetEnvIf REQUEST_URI "/api/v1/" allowapi=1
            Order deny,allow
            Deny from all
            Allow from 192.168.1.0
            Allow from env=allowapi # this does not work, dev.someweb.com/api/v1/someresource still fails with 403 if accessing from another IP
            AllowOverride All
        </Directory>
        ErrorLog /home/webroot/devsite/tmp/log/error_log
    </VirtualHost>

我尝试将 SetEnvIf 移动到不同的地方 - 但它仍然不起作用,dev.someweb.com/api/v1/someresource总是被禁止在192.168.1.0

以防万一 - 我在所有更改之后重新启动了 Apache,但在其日志文件中没有看到任何错误。

我究竟做错了什么?

答案1

无需使用 setenv,只需添加一个允许访问的新目录

<Directory /home/webroot/devsite/public/api/v1/>
   Order deny,allow
   Allow from 
</Directory>

如果是虚拟 URI 路径,则<Location /api/v1/>使用<Directory>

相关内容