mod_rewrite 适用于 .htaccess 文件,但不适用于 apache2.conf
Posted
技术标签:
【中文标题】mod_rewrite 适用于 .htaccess 文件,但不适用于 apache2.conf【英文标题】:mod_rewrite works in .htaccess files but not in apache2.conf 【发布时间】:2010-12-20 23:38:29 【问题描述】:我在 .htaccess 文件中有以下内容作为测试:
重写引擎开启 重写规则 ^(.*)$ /backend/$1
这按预期工作。我能够在 apache2.conf 中使用以下内容进行重写日志记录:
重写日志“/tmp/REWRITE.log” RewriteLogLevel 9
日志文件已创建并按预期记录调试信息。但是,当我删除 .htaccess 文件时,将 apache2.conf 指令更改如下,然后重新启动 apache 以全局执行等效操作,它不起作用。
重写日志“/tmp/REWRITE.log” RewriteLogLevel 9 重写引擎开启 重写规则 ^(.*)$ /backend/$1
我在 Ubuntu 上使用 Apache/2.0.55。
救命!
【问题讨论】:
除了无效还有什么进一步的诊断吗? 【参考方案1】:您是否考虑过在任何其他重写指令之前打开 RewriteEngine?
【讨论】:
好主意,我没有考虑过。但是,我将RewriteEngine on
移到RewriteLog "/tmp/REWRITE.log"
之前,重新启动apache,结果还是一样:(【参考方案2】:
您的 RewriteRule 指令是否包含在特定的服务器定义中?您有工作中的虚拟服务器吗?
我问这个的原因是你说这在特定于目录的.htaccess
文件中有效;虽然官方文档说 RewriteRule 可以应用于服务器配置、虚拟主机、目录、.htaccess。
【讨论】:
感谢您的帮助。从某种意义上说,它是一个虚拟服务器,它是我按月付费的 VPS (Xen)。 RewriteRule 在我将它放入/var/www/public/<some-directory>/.htaccess
时起作用,如第一个示例所示,而当我将它放入/etc/apache2/apache2.conf
时它不起作用,如最后一个示例所示(即使我首先打开 RewriteEngine)。目标是根本不使用 .htaccess 文件 - 我想全局定义一些 RewriteRules。
很抱歉,我无法提供更多帮助。有很多这样的事情是反复试验。 RewriteRule 可能不会那么容易全局应用,但如果你将它放在***目录的 你试过了吗?
RewriteEngine on
RewriteRule ^(.*)$ /backend/$1
<IfModule mod_proxy.c>
RewriteLog "/tmp/REWRITE.log"
RewriteLogLevel 9
</IfModule>
因为这种方式我能够进行重写,但日志没有工作,因此 mod_proxy.c 中存在问题
【讨论】:
以上是关于mod_rewrite 适用于 .htaccess 文件,但不适用于 apache2.conf的主要内容,如果未能解决你的问题,请参考以下文章
.htaccess 适用于 Apache 服务器,但不适用于 FTP 目录
.htaccess 适用于 Apache 服务器,但不适用于 FTP 目录