我們知道在 Apache 中可以使用 .htaccess 來針對當下目錄做相關設定, 但時常發生 .htaccess 無效的狀況, 這邊分享一下一些常見的原因與排除方法
沒有複寫權限
Apache 根目錄預設是禁止複寫設定的, 可以透過編輯 httpd.conf 當中的設定開啟複寫功能
編輯 httpd.conf
sudo vim /etc/apache/httpd.conf
找到相關目錄設定(這邊以內建路徑為例)
<Directory "/Library/WebServer/Documents">
Options FollowSymLinks Multiviews
MultiviewsMatch Any
AllowOverride None
Require all granted
</Directory>
將 AllowOverride 修改為 All
<Directory "/Library/WebServer/Documents">
Options FollowSymLinks Multiviews
MultiviewsMatch Any
AllowOverride All
Require all granted
</Directory>
重新啟動 Apache 即可
檔案名稱錯誤
Apache 可以修改 .htaccess 的名稱, 可能因為某些原因名稱被修改了
可以尋找設定檔中的參數 AccessFileName 來確認正確名稱
模組無效
很多時候其實 .htaccess 有生效, 只是是因為 .htaccess 中有進行模組是否存在的相關檢查, 以至於我們以為沒有生效
.htaccess 可能有類似的內容
<IfModule mod_rewrite.c>
.......
</IfModule>
上述的 .htaccess 會檢查 Apache 是否有 rewrite 這個模組, 若有才執行, 這種狀況變成要啟動該模組才會正常運行
編輯 httpd.conf, 找到下面的內容並將前方的 # 移除
#LoadModule rewrite_module libexec/apache2/mod_rewrite.so