如何debugging.htaccess RewriteRule无法正常工作

我有一个.htaccess文件中的RewriteRule没有做任何事情。 我如何解决这个问题?

  • 我如何validation.htaccess文件是否被Apache读取和遵守? 我可以写一个回应“它正在工作”的消息,如果我写它,那条线会在哪里回应?
  • 如果.htaccess文件没有被使用,我怎样才能让Apache使用它?
  • 如果正在使用.htaccess ,但我的RewriteRule仍然没有效果,我还能做些什么来debugging?

在你的.htaccessinput一些垃圾值,例如foo barsakjnaskljdnas任何没有被htaccess识别的关键字,并访问你的URL。 如果它正在工作,你应该得到一个

500内部服务器错误

内部服务器错误

服务器遇到内部错误或configuration错误,无法完成您的请求….

我build议你在RewriteEngine on之后马上把它放好。


既然你在你的机器上。 我认为你有访问Apache的.conf文件。

打开.conf文件,然后查找类似于以下内容的行:

 LoadModule rewrite_module modules/mod_rewrite.so 

如果它被评论(#),取消注释并重新启动Apache。


要logging重写

 RewriteEngine On RewriteLog "/path/to/rewrite.log" RewriteLogLevel 9 

把上面的3行放在你的virtualhost 。 重启httpd。

RewriteLogLevel 9使用较高的Level值会显着减慢Apache服务器的速度! 使用大于2的级别的重写日志文件仅用于debugging! 级别9将logging几乎每个重写的细节。


UPDATE

Apache 2.4中的事情已经改变了:

从2.2升级到2.4

RewriteLogRewriteLogLevel指令已被删除。 现在通过使用LogLevel指令为mod_rewrite模块configuration适当的日志logging级别来提供此function。 另请参阅mod_rewrite日志logging部分。

有关LogLevel的更多信息,请参阅LogLevel指令

你可以完成

 RewriteLog "/path/to/rewrite.log" 

现在就这样

 LogLevel debug rewrite_module:debug 

“进入一些垃圾价值”的答案没有为我做的伎俩,我的网站是继续加载尽pipe进入垃圾。

相反,我将以下行添加到.htaccess文件的顶部:

 deny from all 

这将很快让你知道,如果.htaccess正在拾起或不。 如果正在使用.htaccess文件夹中的文件将不会加载。

通常,.htaccess中的任何更改都应该具有可见的效果。 如果没有效果,请检查您的configurationapache文件,如:

 <Directory ..> ... AllowOverride None ... </Directory> 

应该改成

 AllowOverride All 

你可以在.htaccess文件中修改指令。

也许更合理的方法是创build一个文件(如test.html),添加一些内容,然后尝试将其设置为索引页面:

 DirectoryIndex test.html 

在大多数情况下,.htaccess规则将覆盖在目录/文件级别工作的Apacheconfiguration

如果你有访问Apache的bin目录,你可以使用,

httpd -M首先检查加载的模块。

  info_module (shared) isapi_module (shared) log_config_module (shared) cache_disk_module (shared) mime_module (shared) negotiation_module (shared) proxy_module (shared) proxy_ajp_module (shared) rewrite_module (shared) setenvif_module (shared) socache_shmcb_module (shared) ssl_module (shared) status_module (shared) version_module (shared) php5_module (shared) 

之后,像Options -Indexesdeny from all这样简单的指令将巩固.htaccess工作正常。

为什么不在你的.htaccess文件中join一些垃圾,并尝试重新加载apache。 如果Apache无法启动,你知道它的工作。 删除垃圾,然后重新加载Apache,如果它加载恭喜你正确configuration.htaccess。