即使 VirtualHost 具有“AllowOverride All”,.htaccess 也會被忽略
我在 Fedora 13 上執行一個執行良好的 LAMP 伺服器;但是,我只是在目前站點的 docroot 文件夾中添加了一個“.htaccess”文件,該文件夾被完全忽略了。
我已經嘗試了六種不同的測試,包括這個:
RewriteEngine on RewriteBase / RewriteRule ^.*$ index.php
但是圖像和所有其他頁面載入正常,不存在的文件仍然是 404。我也試過這個:
order deny,allow deny from all
但是每個頁面仍然可以正常載入。.htaccess 文件再次被 100% 忽略。
我們將虛擬主機記錄放在 /etc/httpd/conf.d/virtual.conf 中。它看起來像這樣:
NameVirtualHost * <VirtualHost *> ServerName intranet DocumentRoot /var/www/default <Directory "/var/www/default"> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost> <VirtualHost *> ServerName ourwebsite.com DocumentRoot /var/www/html/ourwebsite.com/docroot <Directory "/var/www/html/ourwebsite.com/docroot"> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
還有什麼可能導致我們的伺服器完全忽略
.htaccess
文件?編輯:
我將 .htaccess 文件更改為上述文件,以更好地證明我的更改被忽略了。請注意,我在生產伺服器上嘗試了完全相同的 .htaccess 文件,它執行良好。
編輯2:
好的,我有新資訊!僅出於測試目的,我經歷並暫時將每個“AllowOverride”指令更改為
AllowOverride All
. 我發現第一個目錄條目似乎壓倒了所有其他條目:<Directory /> Options FollowSymLinks AllowOverride None </Directory>
當我將其更改為 時
AllowOverride All
,我的 .htaccess 文件開始生效。就像AllowOverride All
我的配置文件中的所有其他指令都被忽略了!是什麼賦予了??
逆天。還記得我說過這是一個開發伺服器嗎?是的..這就是我的虛擬主機條目真正的樣子:
<VirtualHost *> ServerName dev.ourwebsite.com DocumentRoot /var/www/html/dev.ourwebsite.com/docroot <Directory "/var/www/html/ourwebsite.com/docroot"> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
你看到了嗎?好吧,我沒有。我忘記了將我的“目錄”條目更改為 dev.ourwebsite.com 而不是 ourwebsite.com——這一切都不同了。我只是假設如果目錄不存在,Apache 會拋出錯誤;但這僅適用於 DocumentRoot 指令。是基於匹配的——這意味著如果它匹配傳入的請求,它就會應用規則,否則,它不在乎你是否告訴它在魔法獨角獸上允許覆蓋。
讓這成為任何其他前來尋找的人的一個教訓——當所有其他方法都失敗時,考慮一下萬能的 Typo。