您是否必须重新启动apache才能使.htaccess中的重写规则生效?


Answers:


93

重新启动不是要求更改为.htaccess。还有其他问题。

确保您的.htaccess包含以下语句

在RewriteEngine上

即使在httpd.conf中也有此要求。还要检查httpd进程是否可以读取.htaccess。
检查error_log- 如果正在使用.htaccess,它将告诉您任何错误。在.htaccess中放一个故意的语法错误是一项很好的检查,以确保文件正在使用中–您应该在同一目录中的任何页面上收到500错误。

最后,您可以在httpd.conf中使用以下命令启用重写日志:

RewriteLog“日志/ rewritelog”

RewriteLogLevel 7

这样生成的日志文件将为您详细介绍匹配的重写规则及其处理方式。


3
这有点过时了。我遇到了类似的问题,并想调试特定用例的重写。我尝试了这种方法,但是经过一番挫折和挖掘之后,我发现了问题所在。这是针对较旧版本的apache。对于apache2.4>将上面的RewriteLog&LogLevel替换为:LogLevel alert rewrite:trace7。后重新启动Apache的,你应该看到在error.log中希望有所帮助的痕迹。 http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging
Casper Wilkes,

52

Apache允许通过放置在Web树中的特殊文件来分散管理配置。通常会调用特殊文件.htaccess,但是可以在AccessFileName指令中指定任何名称...由于.htaccess文件是在每次请求时读取的,因此对这些文件所做的更改将立即生效...


如果您已在启用站点的文件中将用户名添加到“需要用户”,则凭经验发现您确实需要重新启动。一个优雅的人做到了。
罗斯,

18

从apache文档中:最常见的问题是未设置AllowOverride以使您的配置指令得到遵守。确保对于所涉及的文件范围没有有效的AllowOverride None。一个很好的测试方法是将垃圾放入.htaccess文件中并重新加载。如果未生成服务器错误,则几乎可以肯定,AllowOverride None有效。


1
删除链接到Apache -的AllowOverride:httpd.apache.org/docs/2.2/mod/core.html#AllowOverride
scunliffe

2
我将这行“ <directory /> </ directory>”添加到我的.htaccess文件中,以在日志中生成错误。它将显示“ <此处不允许目录”,并且我知道它正在读取我的文件。
Mnebuerquo

3

只有当你没有将mod_rewrite模块添加到Apache时。

仅当您更改任何Apache“ .conf”文件时,才需要重新启动Apache。



2

如果.htaccess无效,则不需要重新启动。可能的原因包括。

  • 可能未设置 AllowOverride,该用户可以在httpd.conf中进行设置,或者可能必须与服务器管理员联系。

  • 检查.htaccess的文件名,它应该是.htaccess而不是htaccess.txt 有关如何创建文件的信息,请参见此处

  • 尝试使用Options -Indexesdeny all某种简单的指令来查看其是否有效。

  • 如果具有重定向规则,则每次都清除浏览器缓存;如果缓存了先前的重定向,则每次清除浏览器缓存,似乎一切都没有用。


0

您的.htaccess中有什么?重写规则?检查是否已安装并启用了mod_rewrite。

其他的东西?尝试在该目录上将AllowOverride设置为'all'。

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.