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 可能不会那么容易全局应用,但如果你将它放在***目录的 块中,它可能会应用于所有子目录..【参考方案3】:

你试过了吗?

    RewriteEngine on
    RewriteRule ^(.*)$ /backend/$1

<IfModule mod_proxy.c>
    RewriteLog "/tmp/REWRITE.log"
    RewriteLogLevel 9

</IfModule>

因为这种方式我能够进行重写,但日志没有工作,因此 mod_proxy.c 中存在问题

【讨论】:

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

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

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

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

.htaccess 和 mod_rewrite 出错

子域 mod_rewrite (htaccess) 到相对目录

将 .htaccess 转换为 nginx (mod_rewrite)