为什么在 .htaccess 中启用重写日志不起作用?

为什么在 .htaccess 中启用重写日志不起作用?

我想启用重写日志记录,以便我可以调试重写规则,但添加 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文件中!

相关内容