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


9

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

Answers:


14

除了忘记无法在.htaccess文件中配置日志记录之外,这还证明是Apache版本的问题。RewriteLog指令已在较新的版本中替换,并将以下内容添加到Virtualhost配置中为我启用了重写日志:

LogLevel alert rewrite:trace3 (can be increased to trace8)

从手册中:

那些熟悉mod_rewrite早期版本的人无疑会在寻找RewriteLog和RewriteLogLevel指令。上面提到的新的每模块日志记录配置已完全取代了此功能。

要在错误日志中过滤掉这些消息,您可以执行以下操作:

tail -f error_log|fgrep '[rewrite:'

您的问题最初被标记为apache-2.2对吗?我可能忽略了问题本身的版本。好眼力。
HBruijn 2015年

万一这对任何人都有帮助,我的问题是我在VHost中启用了端口80而不是443的日志记录。我使用的是HTTPS,因此我的日志记录无法正常工作。花了我一段时间找到那个愚蠢的错误:(
BrianVPS

我想补充一点,您必须mod_log_debug启用...
thoni56 '19

4

我忍不住要重复自己:

大多数使用.htaccess并在ServerFault上询问此问题的人都不应首先使用.htaccess,因为这是最终的解决方案,永远不适合管理员使用:

如果可以访问httpd主服务器配置文件,则应避免完全使用.htaccess文件。使用.htaccess文件会降低Apache http服务器的速度。可以在.htaccess文件中包含的任何指令最好在Directory块中进行设置,因为它具有相同的效果和更好的性能。
资料来源: Apache手册

显然,大多数发布配置的人都是热衷于编程的程序员,他们热衷于盲目复制.htaccess文件,而不了解其原因。

您的问题就是一个很好的例子:该RewriteLog指令仅在服务器配置或虚拟主机的上下文中有效。

这意味着不允许.htaccess文件中!


4
查找日志正是想要学习而不是复制的人会做的。似乎Apache设置了经典的catch-22:如果无法访问服务器根目录,则仅应使用.htaccess 。但是,只有可以访问服务器根目录才能打开日志记录。如果他们让您使用.htaccess进行所有这些重写,则他们应该让您记录其操作,从而不必依赖随机复制和粘贴/尝试和错误。
马克·贝里

5
诸如Wordpress之类的某些应用程序会生成需要调试的.htaccess文件。这似乎是这种情况。当尝试计算别人难以理解的正则表达式时,从.htaccess文件进行日志记录是逻辑上的第一步。
KeithL
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.