该目录private
位于我的 DocumentRoot 下,尽管它的名称不同,但它应该像任何其他目录一样可以访问。但如果我将以下内容添加RewriteRule
到 httpd.conf:
RewriteRule ^/([^\.]+)$ /$1.html [L]
Apache 返回 403http://服务器/private/2201. 错误日志显示
client denied by server configuration: /private/2201.html
如果我随后将其重命名private
为foo
,或者直接请求 2201.html,则会提供该文件:
127.0.0.1 - - [21/Nov/2011:10:24:45 +0100] "GET /private/2201 HTTP/1.1" 403 214
127.0.0.1 - - [21/Nov/2011:10:24:58 +0100] "GET /foo/2201 HTTP/1.1" 200 3068
127.0.0.1 - - [21/Nov/2011:10:27:39 +0100] "GET /private/2201.html HTTP/1.1" 200 3068
这让人困惑。名为 的目录是否有任何特殊规则private
?如果有的话——为什么直接请求 2201.html 会起作用(尽管被拒绝的请求似乎处理相同的资源,至少根据错误日志条目)?
答案1
据我所知,Apache 或 mod_rewrite 中没有任何东西使该名称变得private
特殊。但是,您的配置可能带有默认规则,该规则会以不同的方式处理该名称。尝试在您的配置中查找单词private
,例如
grep private /etc/httpd/httpd.conf # RedHat, CentOS
grep -r private /etc/apache2 # Debian, Ubuntu, etc.
如果您发现匹配的 RewriteRule,那就是罪魁祸首。
您的日志条目清楚地表明,特定名称是private
导致问题的原因,并且一定是 RewriteRule 导致请求被拒绝。