Apache-2.2

即使 VirtualHost 具有“AllowOverride All”,.htaccess 也會被忽略

  • February 9, 2019

我在 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。

引用自:https://serverfault.com/questions/203550