排除重写目录表单protectrion

时间:2015-07-24 10:44:00

标签: apache .htaccess mod-rewrite

我们有一个magento安装。由于开发目的,我们用.htacces保护关闭它。但我确实想打开API,所以我不必将一堆第三方服务列入白名单。

以下构造适用于存在的文件(api.php),但不适用于重写的网址(apiapi/?wsdl)。

.htaccess是public_html之上的一个目录。基于perishablepress

AuthType Basic
AuthName "Toegang nodig? neem gerust contact op: 038-8200270 !"
AuthUserFile /home/kijken/domains/.htpasswd
AuthGroupFile /dev/null
Require valid-user
# allow public access to the following resources
SetEnvIf Request_URI "^/api.php" allow
SetEnvIf Request_URI "^/api/" allow  #api is not a real folder
SetEnvIf Request_URI "^/api/?wsdl" allow

Order allow,deny
Allow from env=allow

Allow from 217.121.158.248 #Company HQ

Satisfy any

带有.htaccess的Magento位于​​文件的public_html,mirror

我需要更改什么才能使其与非现有文件一起使用?
只要符合以下3个标准,我不介意不同的设置:

  1. 白名单IP(目前有效)
  2. 登录其他IP(目前有效)
  3. 排除某些网址(根问题)

2 个答案:

答案 0 :(得分:1)

查看您的设置并按照说明操作,最简单的方法是将限制代码放在 Magento htaccess 的顶部({{1} })。

  

我把它贴在了其余的magento .htacces里面   的public_html。我的问题没有任何改变。问题依然存在   相同。

那是因为Magento的htaccess抹去了你的限制。您需要删除这两行:

enter image description here

另一个细节
/public_html/.htaccess因为:{/ p>而无用

  1. 查询字符串部分(SetEnvIf Request_URI "^/api/?wsdl" allow此处)未包含在wsdl中 (不符合你的期望)
  2. 之前的规则(Request_URI)更大,包含您无用的规则
  3. <强>结论
    这是你的最终代码应该是什么样子

    SetEnvIf Request_URI "^/api/" allow

    经过测试和工作

答案 1 :(得分:0)

要根据CGI参数设置环境变量,您需要求助于mod_rewrite,例如。

RewriteEngine On
# Set environment variable "allow" to Allow requests for /api/?wsdl
RewriteCond   %{QUERY_STRING} wsdl
RewriteRule   ^/?api  - [E=allow:1]

# Set environment variable "allow" to Allow requests for URL's that are not Files (-f) and not Directories (-d)
RewriteCond %{REQUEST_FILENAME} !-f   
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ - [E=allow:1]

如果您可以访问httpd.conf,请将规则粘贴在服务器配置中,因为它们只需在服务器启动时解析/编译一次,而不是每次请求。