如何让 URL 重写在 Debian Lenny 上的 Apache 2.2 上运行

如何让 URL 重写在 Debian Lenny 上的 Apache 2.2 上运行

我正在尝试让 mod_rewrite 规则在 Debian Lenny 上的 apache 2.2 下运行。为了尝试让它首先运行,我将规则放入 /etc/apache2/mods-enabled/rewrite.load 中:

RewriteEngine On
RewriteRule http-poll/ http://jabberserver:5280/http-poll [P]
RewriteLog "/tmp/rewrite.log"
RewriteLogLevel 3

但是当我使用浏览器访问时出现 404 错误http://localhost/http-poll重新启动 apache 后。Error.log 有:

[Wed Jun 30 15:22:53 2010] [error] [client 127.0.0.1] File does not exist: /var/www/http-poll

“/tmp/rewrite.log” 是空的。

我已经启用模块(包括 mod_rewrite)(a2enmod rewrite proxy proxy_http)

答案1

http-poll/我注意到,在您的重写规则中,要匹配的模式以斜线结尾,但您访问的 URL 却不是这样。尝试从中删除斜线RewriteRule,看看是否能起作用。

答案2

我认为您需要同时指定绝对路径,并确保模式位于本地路径的开头:

重写规则 ^/http-poll/ http://jabberserver:5280/http-poll/ [P]

因为如果相同的 Apache conf 文件解释代理,则重写规则将再次应用。

此外,如果您想重定向 /http-poll/ 下的 URL,您应该指定正则表达式替换:

重写规则 ^/http-poll/(.*) http://jabberserver:5280/http-poll/$1 [P]

是的,这绝对是一个服务器故障 qn。

答案3

其他答案都没有解释为什么您的重写日志是空的。

这是我的猜测:除非您包含了指令“RewriteOptions Inherit”,否则全局重写指令将不会被 VirtualHost 指令继承(这与许多其他 Apache 配置的工作方式不一致)。

除了打开继承选项之外,您还可以在正在测试的虚拟主机中重复相关的重写指令。

其他地方建议检查“LoadModule”行,但这并不相关。如果缺少该行,您的配置很可能会被破坏,并且您会收到如下错误:

“无效命令‘RewriteEngine’,可能是拼写错误或由服务器配置中未包含的模块定义”

例外情况是,如果您将所有重写指令包装在“IfModule”块中,那么当模块丢失时它们就会消失。

答案4

mod_rewrite.load 不应该只包含这样的一行吗?

LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

无论如何,如果我将重写规则放在服务器配置 ( ) 中,它对我来说是有效的,但如果它们放在 mod_rewrite.load (Ubuntu 8.04,Apache 2.2.8) 中,它就不起作用。如果您不使用虚拟主机,请尝试将它们放在文档根目录的部分<VirtualHost>中。<Directory>

相关内容