Apache mod_rewrite 适用于 .htaccess 但不适用于 httpd.conf
Posted
技术标签:
【中文标题】Apache mod_rewrite 适用于 .htaccess 但不适用于 httpd.conf【英文标题】:Apache mod_rewrite works in .htaccess but not httpd.conf 【发布时间】:2011-07-04 12:42:29 【问题描述】:我是第一次尝试 mod_rewrite(我是网络新手,但正在努力学习)。我试图让 bob.html 重定向到 alice.html (阅读:URL 保持不变,页面内容是 alice.html )。这两个文件都在 /var/www/ 中。我正在运行带有 Apache 2.2.16 的 Ubuntu 10.10。
以下是 /var/www/ 目录中的 .htaccess 文件的工作原理:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^bob.html$ alice.html
</IfModule>
这符合预期,但在移至 httpd.conf 文件时不起作用(只是学习具有性能的最佳实践等)。我在某处读到,在 httpd.conf 文件中使用 mod_rewrite 时,需要前导斜杠,所以我的 httpd.conf 文件如下所示:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^/bob.html$ /alice.html
</IfModule>
我还了解到 /etc/apache2/sites-enabled/000-default 需要将 AllowOverride 设置为 All。 p>
<Directory /var/www>
...
AllowOverride All
...
</Directory>
我认为这只是为了与 .htaccess 一起使用,但我不确定,所以我把它留在了。
使用所有这些配置设置,重定向不起作用。我已经测试以确保文件本身正在被读取(有人建议不再使用 httpd.conf 而是使用 apache2.conf)插入错误的代码.我已经查看了其他几个问题/答案,但我仍然无法弄清楚。
编辑:需要注意的是,每次更改 httpd.conf 后我都在使用 /etc/init.d/apache2 restart > 重新启动 Apache 并(希望)重新加载配置。
【问题讨论】:
httpd.conf 指令中没有前导斜杠会怎样? 行为没有变化。仍然不起作用,并且似乎没有发生任何不同的事情。 您在 httpd.conf 文件中的哪个位置放置了<IfModule>
块?
<IfModule>
是文件中唯一的文本。
【参考方案1】:
尝试将重写规则包装在您的 httpd.conf 文件中的
【讨论】:
在以上是关于Apache mod_rewrite 适用于 .htaccess 但不适用于 httpd.conf的主要内容,如果未能解决你的问题,请参考以下文章
Apache mod_rewrite 适用于 .htaccess 但不适用于 httpd.conf
.htaccess 适用于 Apache 服务器,但不适用于 FTP 目录