我想启用重写日志记录,以便我可以调试重写规则,但添加 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 文件中可以包含的任何指令设置在 Directory 块中,因为它将具有相同的效果且性能更好。
来源: Apache 手册
显然,大多数发布其配置的人似乎货物崇拜程序员热衷于盲目复制 .htaccess 文件而不了解原因。
你的问题就是一个很好的例子:RewriteLog
指令仅在语境服务器配置或虚拟主机......
这意味着不允许在一个.htaccess
文件中!