目錄private
位於我的 DocumentRoot 下,儘管它的名稱如此,但它應該像任何其他目錄一樣可以存取。但是如果我將以下內容新增RewriteRule
到 httpd.conf 中:
RewriteRule ^/([^\.]+)$ /$1.html [L]
Apache 回傳 403http://伺服器/私人/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
特別,AFAIK。但是,您的配置可能附帶一個以不同方式處理該名稱的預設規則。嘗試 grep 您的配置以查找單字private
,例如
grep private /etc/httpd/httpd.conf # RedHat, CentOS
grep -r private /etc/apache2 # Debian, Ubuntu, etc.
如果您找到匹配的 RewriteRule,那就是您的罪魁禍首。
您的日誌條目明確表明是名稱private
導致了問題,並且一定是 RewriteRule 導致請求被拒絕。