mod_rewrite代理RewriteRule无法正常工作

时间:2009-11-27 03:31:51

标签: apache mod-rewrite

我需要将目录home / alphauser的所有请求发送到backend / alphauser,而不是请求home / alphauser目录下的文件。例如:

http://home/alphauser            ->   http://backend/alphauser
http://home/alphauser/           ->   http://backend/alphauser
http://home/alphauser/icon.png   ->   http://home/alphauser/icon.png
http://home/alphauser/index.html ->   http://home/alphauser/index.html

我在home / alphauser /目录中创建了一个“.htaccess”文件,其中包含以下内容:

RewriteEngine on
RewriteRule ^$ http://backend/alphauser [P]

mod_rewrite允许按预期访问home / alphauser /目录中的文件,但是当使用或不使用斜杠请求目录本身时:

http://home/alphauser
http://home/alphauser/

..浏览器(firefox)提供了一个文件下载弹出窗口,其中指出:

You have chosen to open a file which
is a: httpd/unix-directory

该文件的内容是来自后端/ alphauser的正确html(这是JSP的url模式),因此返回的有效负载是正确的。似乎apache正在发回这个奇怪的mime类型的“httpd / unix-directory”

帮助!

2 个答案:

答案 0 :(得分:0)

罗伯特,

这对我来说似乎很奇怪

RewriteEngine on
RewriteRule ^$ http://backend/alphauser [P]

你所做的正则表达式基本上匹配任何公平的表达,但它不会将URI传递给后端。

RewriteEngine on
RewriteRule ^/alphauser/$ http://backend/alphauser [P]

RewriteRule ^/$ http://backend/alphauser [P]

我不是100%确定mod_rewrite在.htaccess文件中的行为

这对我的意见非常有意义,您还必须确保启用了mod_proxymod_proxy_http,否则它将无效。

答案 1 :(得分:0)

事实证明这个问题与mod_rewrite无关。我的后端根本没有发送ContentType标头。一旦我将其设置为填充ContentType为text/html,一切正常。