在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中运行。此外,父规则将在子规则之后应用。