【发布时间】:2016-10-05 18:30:09
【问题描述】:
我想使用 .htaccess 配置阻止来自我的站点的路径。这个想法是,在使用基本身份验证进行身份验证后,只有一组特定的 IP 可以从 URL 访问该特定路径。
注意:这是一个路径,而不是页面或目录。我们正在尝试屏蔽 Web 服务,因此只有对 URL 的 post 调用。
我希望阻止 URL example.com/rest 以及基于 IP 的 URL 后面的所有内容。所以example.com/rest/foo和example.com/rest/foo/bar应该被屏蔽。
来自应用程序的所有其他路径应保持正常运行且无需基本身份验证。
IP 屏蔽部分在我之前问过的question 中已经解决了。
基本配置(阻塞部分,.htaccess 中有更多内容但与本题无关。)您可以在下面找到。
SetEnvIf Request_URI "/rest(/.*)?$" rest_uri
# Check on what subdomain we are.
SetEnvIf Host ^local\. None_Prod_Env
# Static
SetEnvIf AH_CLIENT_IP ^123\.123\.123\.123$ Allow_Host
# Range
SetEnvIf AH_CLIENT_IP ^123\.123\.123\. Allow_Host
Order deny,allow
Deny from all
Allow from env=!rest_uri
Allow from env=Allow_Host
Allow from env=None_Prod_Env
所以上面的配置阻止了对 /rest/* 的所有访问,但不阻止对非 rest 路径的访问,它允许来自 IP X 的用户(Allow_Host 变量)并且在这种情况下我们不允许本地生产环境。
我尝试使用基本身份验证来扩展此功能,如下所示:
SetEnvIf Request_URI "/rest(/.*)?$" rest_uri
SetEnvIfNoCase Request_URI "/rest(/.*)?$" require_auth=true
# ... Allow Host stuff and none prod stuff ...
Order deny,allow
Deny from all
Allow from env=!rest_uri
Allow from env=Allow_Host
Allow from env=None_Prod_Env
AuthName "Password Protected"
AuthType Basic
AuthBasicProvider file
AuthUserFile /var/www/html/.htpasswd
Require valid-user
但是,这会导致所有页面都进行基本身份验证,而不仅仅是 /rest/* url。我玩了很多,但无法弄清楚。将 SetEnvIfNoCase 更改为 SetEnvIf 也没有帮助。
注意:我们的服务器运行的是 apache 2.2.22。
【问题讨论】:
标签: php apache .htaccess mod-rewrite drupal-7