我想启用重写日志logging,以便我可以debugging重写规则,但添加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
除了忘记日志logging不能在.htaccess文件中configuration,这也是一个Apache版本的问题。 RewriteLog指令已在新版本中被replace,并将以下内容添加到虚拟主机configuration中为我启用了重写日志:
LogLevel alert rewrite:trace3 (can be increased to trace8)
从手册:
熟悉早期版本的mod_rewrite的人无疑会在寻找RewriteLog和RewriteLogLevel指令。 这个function已经完全被上面提到的新的每个模块的日志configuration所取代。
要在错误日志中过滤这些消息,您可以执行如下操作:
tail -f error_log|fgrep '[rewrite:'
我忍不住重复自己:
在ServerFault上使用.htaccess并询问它的大多数人不应该首先使用.htaccess,因为这是一个永远不会用于pipe理员的最终用户解决scheme:
如果您有权访问httpd主服务器configuration文件,则应该完全避免使用.htaccess文件。 使用
.htaccess文件会降低您的Apache HTTP服务器速度。 您可以包含在.htaccess文件中的任何指令在目录块中设置得更好,因为它具有相同的效果,性能更好。
资料来源: Apache手册
显然,大多数公布他们的configuration的人似乎是货物崇拜的程序员,热衷于复制.htaccess文件盲目不知道原因。
你的问题是一个很好的例子: RewriteLog指令只在服务器configuration或虚拟主机上下文中有效。
这意味着它不允许在.htaccess文件中!