mod_rewrite指令在.htaccess中工作,但在httpd.conf中被忽略

Tim*_*imK 10 mod-rewrite debian apache2

在apache2中与mod_rewrite挣扎.问题是当将指令放入httpd.conf时会被忽略.

如果我AllowOverride All在sites-available/default中设置并将指令添加到.htaccess,则它会起作用,并且每个请求都会在mod_rewrite.log中弹出.

但是当我删除.htaccess并将AllowOverride All指令添加到httpd.conf时,它被忽略了.

Httpd.conf看起来像这样:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteLog "/var/log/apache2/mod_rewrite.log"
    RewriteLogLevel 4 
    RewriteRule ^/.* http://www.google.com                                     
</IfModule>
Run Code Online (Sandbox Code Playgroud)

(只需选择谷歌进行调试)

Phpinfo()在加载的模块中显示mod_rewrite,rewrite.load在/ mods-enabled符号链接到mods-available,即它确实存在.此外,当我删除mod_rewrite.log时,它是在服务器启动时创建的,IMO表示读取了httpd.conf并且存在mod_rewrite.c.但mod_rewrite.log保持空白,这表示没有请求发送到mod_rewrite.此外,当将废话放入httpd.conf服务器时,将无法启动并抛出错误.

我错过了什么?有没有像AllowOverride我必须设置甚至主配置文件?

我已经玩过/.htaccess使用相对路径而httpd.conf没有.我也试过设置<Directory>标签,这对我来说没有意义,但仍然试着看看它是否有任何变化......帮助?!


自己想出来,但万一有人遇到同样的问题:

httpd.conf中设置的"全局"重写规则必须包含在每个虚拟主机中

<VitualHost *:80>
    RewriteEngine on
    RewriteOptions Inherit
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

否则他们将无法在VHost中工作.此外,父规则在子规则之后应用.