【发布时间】:2009-11-27 03:31:51
【问题描述】:
我需要将对目录 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”文件,内容如下:
重写引擎开启 RewriteRule ^$ http://backend/alphauser [P]
mod_rewrite 允许按预期访问 home/alphauser/ 目录中的文件,但是当请求目录本身时,无论是否带有斜线:
http://home/alphauser http://home/alphauser/
..浏览器 (firefox) 会显示一个文件下载弹出窗口,其中指出:
您选择打开一个文件 是一个:httpd/unix-目录
文件的内容是来自后端/alphauser 的正确 html(这是 JSP 的 url 模式),因此返回的有效负载是正确的。似乎 apache 正在发回这种奇怪的 mime 类型的“httpd/unix-directory”
救命!
【问题讨论】:
-
当您将其发送到带有
[P]标志的 mod_proxy 时,您的设置是否正确?我有一种感觉,可能是因为这个。你的日志说什么?您可以使用T标志设置 RewriteRule 的 mimetype,例如[T=text/html]但我认为这不是最好的解决方案。 -
我已经在我的 apache2.conf 中使用了 ProxyPass 指令,所以我假设 mod_proxy 设置正确。 error.log 没有任何内容,access.log 仅显示带有用户代理信息的 GET "/alphauser/" 消息。我用 [P,T=text/html] 尝试了相同的 RewriteRule,结果完全一样。
-
我在 apache2.conf 中设置了一个 RewriteLog 指令并将日志级别设置为 9。输出看起来正常:(1)
applying pattern ^$ to uri ''(2)rewrite -> backend/alphauser(3)forcing proxy-throughput with backend/alphauser(4 )go-ahead with proxy request proxy:backend/alphauser [OK]
标签: apache mod-rewrite