我想啟用重寫日誌記錄,以便可以偵錯重寫規則,但新增 RewriteLog 指令會導致 500 錯誤。
版本資訊:
Ubuntu 14.04
Server version: Apache/2.4.12 (Ubuntu)
Server built: Feb 4 2015 14:22:06
的內容.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteLog /var/log/apache2/rewrite.log
RewriteLogLevel 5
RewriteBase /
RewriteRule ^/wordpress/wp-content/(.*)$ /wp-content/$1 [L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
在錯誤日誌中我看到:
/var/www/path.to/wordpress/.htaccess: Invalid command 'RewriteLog', perhaps misspelled or defined by a module not included in the server configuration
答案1
除了忘記了日誌記錄不能在.htaccess
文件中配置之外,這也是 Apache 版本問題。 RewriteLog 指令已在新版本中被替換,並將以下內容新增至 Virtualhost 配置中,為我啟用了重寫日誌:
LogLevel alert rewrite:trace3 (can be increased to trace8)
從手冊中:
熟悉 mod_rewrite 早期版本的人無疑會尋找 RewriteLog 和 RewriteLogLevel 指令。此功能已完全被上面提到的新的每模組日誌記錄配置所取代。
若要過濾掉錯誤日誌中的這些訊息,您可以執行以下操作:
tail -f error_log|fgrep '[rewrite:'
答案2
我忍不住重複一遍:
大多數使用 .htaccess 並在 ServerFault 上詢問它的人一開始就不應該使用 .htaccess,因為這是最終用戶解決方案,從來不適合管理員:
你應該完全避免使用 .htaccess 文件如果您有權存取 httpd 主伺服器設定檔。使用
.htaccess
檔案會降低 Apache http 伺服器的速度。可以包含在 .htaccess 檔案中的任何指令最好在目錄區塊中設置,因為它將具有相同的效果和更好的效能。
來源: 阿帕契手冊
顯然,大多數發布其配置的人似乎都是貨物崇拜程式設計師熱衷於盲目複製.htaccess檔案而不了解原因。
你的問題就是一個很好的例子:RewriteLog
指令僅在以下情況有效情境伺服器配置或虛擬主機的...
這意味著它是不允許在一個.htaccess
文件中!