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

时间:2013-02-19 13:19:18

标签: mod-rewrite apache2 debian

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

如果我在sites-available / default中设置AllowOverride All并将指令添加到.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>

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

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>

否则它们将无法在VHost中运行。此外,父规则将在子规则之后应用。

0 个答案:

没有答案