Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 仅扩展名需要基本身份验证_Apache_.htaccess_Authentication - Fatal编程技术网

Apache 仅扩展名需要基本身份验证

Apache 仅扩展名需要基本身份验证,apache,.htaccess,authentication,Apache,.htaccess,Authentication,我们在云上有一些公共内容,我正试图使用Basic Auth阻止人们访问我们的非生产性网站,除非他们在我们的公司网络上 在我提交一个请求之前,一切都在运行,该请求只是一个扩展名,比如“/.js” $ wget https://test.domain.com/.js HTTP request sent, awaiting response... 401 Authorization Required Authorization failed. 如果添加文件名,则不会要求我进行身份验证。如果文件确实存

我们在云上有一些公共内容,我正试图使用Basic Auth阻止人们访问我们的非生产性网站,除非他们在我们的公司网络上

在我提交一个请求之前,一切都在运行,该请求只是一个扩展名,比如“/.js”

$ wget https://test.domain.com/.js
HTTP request sent, awaiting response... 401 Authorization Required
Authorization failed.
如果添加文件名,则不会要求我进行身份验证。如果文件确实存在,我会得到200分

$ wget https://test.domain.com/x.js
HTTP request sent, awaiting response... 404 Not Found
2014-05-29 16:59:35 ERROR 404: Not Found.
下面是基本的身份验证配置。它是文档根目录中的.htaccess目录

SetEnvIf     HOST             "^www.domain.com$"    allowProduction
SetEnvIF     X-Forwarded-For  "123\.123\.123\.123"  allowEmployee

AuthType     Basic
AuthName     "Authentication Required"
AuthUserFile /location/of/passwords/.htpasswd

Order        Deny,Allow
Deny         from all
Satisfy      any
Require      valid-user
Allow        from env=allowProduction
Allow        from env=allowEmployee
我修改了日志格式以显示X-Forwarded-For,因为Apache位于负载平衡器后面

123.123.123.123 test.domain.com - - [29/May/2014:16:54:48 -0400] "GET /.js HTTP/1.0" 401 497 "-" "Wget/1.12 (linux-gnu)"
123.123.123.123 test.domain.com - - [29/May/2014:16:59:35 -0400] "GET /x.js HTTP/1.0" 404 287 "-" "Wget/1.12 (linux-gnu)"
我甚至尝试根据请求URI添加一些规则。我尝试了一些带有或不带前导“/”的变体。他们都没有工作

SetEnvIf     Request_URI      "^/\..*$"             allowJunk
然后添加了以下内容

Allow        from env=allowJunk
我们确实有一个重写规则来禁止前导“.”的请求,但这是403而不是401。403是可以接受的,因为浏览器可以忽略它。401要求用户输入用户名和密码

RewriteRule "(^|/)\." - [F]
禁止请求的示例

$ wget https://test.domain.com/x/.js
HTTP request sent, awaiting response... 403 Forbidden
2014-05-29 17:04:18 ERROR 403: Forbidden.
简单的解决方案是不请求任何前导的“.”URL,但我们正在使用其他人的框架,并在某些浏览器上获得这些请求。为一小部分客户重写框架是不可取的。提示他们输入密码就更不可取了

有什么建议吗

谢谢,
Wes.

您的问题是授权和重写的处理顺序,我假设–您的
重写规则
无法用前导点“捕获”资源,授权之前已经生效。(我打赌,如果您为这样的资源输入有效的身份验证凭据,那么您将从以后的重写中获得403?)作为一个快速修复,可以尝试将
Require
指令放入
Files
指令,这只针对不以
开头的文件,我知道顺序,因为我尝试使用“重写”来设置环境变量。传递用户和密码不会导致403。我仍然不清楚的是
setenif
失败的原因。仅将
.js
更改为只转储
phpinfo()
的PHP页面显示我正在匹配这两个
setenif
。我没有访问httpd.conf的权限,所以可能我遗漏了什么。