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 文件中的哪个位置放置了 &lt;IfModule&gt; 块? &lt;IfModule&gt; 是文件中唯一的文本。 【参考方案1】:

尝试将重写规则包装在您的 httpd.conf 文件中的 标记中。似乎改变了行为,使其更类似于 .htaccess 文件。

【讨论】:

选项卡中的包装使类似的东西在 .conf 文件中工作,这些文件在 .htaccess 中工作,但在 .conf 文件中没有。

以上是关于Apache mod_rewrite 适用于 .htaccess 但不适用于 httpd.conf的主要内容,如果未能解决你的问题,请参考以下文章

Apache mod_rewrite 适用于 .htaccess 但不适用于 httpd.conf

apache mod_rewrite适用于任何可能性的规则

.htaccess 适用于 Apache 服务器,但不适用于 FTP 目录

.htaccess 适用于 Apache 服务器,但不适用于 FTP 目录

删除多个尾随斜杠 mod_rewrite

apache mod_rewrite 模块未安装