Apache mod_重写代理重写规则不工作

Apache mod_重写代理重写规则不工作,apache,mod-rewrite,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目录的所有请求发送到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 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] 重新启动发动机 重写规则^$http://backend/alphauser [P] mod_rewrite允许按预期访问home/alphauser/目录中的文件,但当请求目录本身时,无论是否使用斜杠:

http://home/alphauser http://home/alphauser/ http://home/alphauser http://home/alphauser/ ..浏览器(firefox)会显示一个文件下载弹出窗口,其中说明:

You have chosen to open a file which is a: httpd/unix-directory 您已选择打开一个文件,该文件 是:httpd/unix目录 该文件的内容是来自backend/alphauser的正确html(这是JSP的url模式),因此返回的负载是正确的。似乎apache正在发回这种奇怪的mime类型的“httpd/unix目录”

救命啊

罗伯特

我觉得这很奇怪

RewriteEngine on
RewriteRule ^$ http://backend/alphauser [P]
您创建的正则表达式基本上与任何内容都匹配,但它不会将URI传递到后端

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

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

在我看来,这很有意义,而且您必须确保启用了
mod_proxy
mod_proxy\u http
,否则它将无法工作

罗伯特

我觉得这很奇怪

RewriteEngine on
RewriteRule ^$ http://backend/alphauser [P]
您创建的正则表达式基本上与任何内容都匹配,但它不会将URI传递到后端

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

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


在我看来,这很有意义,而且您必须确保启用了
mod_proxy
mod_proxy\u http
,否则它将无法工作

原来问题与mod_重写无关。我的后端根本没有发送ContentType头。一旦我将其设置为将ContentType填充为
text/html
,一切都正常了。

结果表明问题与mod_rewrite无关。我的后端根本没有发送ContentType头。一旦我将其设置为将ContentType填充为
text/html
一切正常。

当您使用
[p]
标志将其发送到mod_proxy时,您的设置是否正确?我有一种感觉,这可能就是原因。你的日志怎么说?您可以使用
T
标志设置RewriteRule的mimetype,例如
[T=text/html]
,但我认为这不是最好的解决方案。我已经在apache2.conf中使用了ProxyPass指令,因此我假设mod_proxy设置正确。error.log没有任何内容,access.log只显示一条带有用户代理信息的GET“/alphauser/”消息。我用[P,T=text/html]尝试了相同的重写规则,结果完全相同。我在apache2.conf中设置了一个RewriteLog指令,并将日志级别设置为9。输出似乎正常:(1)
将模式^$应用于uri'
(2)
重写->后端/alphauser
(3)
使用后端/alphauser强制代理吞吐量(4)
继续代理请求proxy:backend/alphauser[OK]
当您使用
[P]
标志将其发送到mod_代理时,你的设置正确吗?我有一种感觉,这可能就是原因。你的日志怎么说?您可以使用
T
标志设置RewriteRule的mimetype,例如
[T=text/html]
,但我认为这不是最好的解决方案。我已经在apache2.conf中使用了ProxyPass指令,因此我假设mod_proxy设置正确。error.log没有任何内容,access.log只显示一条带有用户代理信息的GET“/alphauser/”消息。我用[P,T=text/html]尝试了相同的重写规则,结果完全相同。我在apache2.conf中设置了一个RewriteLog指令,并将日志级别设置为9。输出似乎正常:(1)
将模式^$应用于uri“”
(2)
重写->后端/alphauser
(3)
使用后端/alphauser强制代理吞吐量(4)
继续代理请求代理:后端/alphauser[确定]
没有运气。mod_proxy已启用,因为我已经在apache2.conf中使用了ProxyPass和proxyreverseepass指令。实际上,正则表达式^$不匹配任何文件,只匹配目录。我对传递URI不感兴趣-.htaccess已经在alphauser目录中了-所以要传递的URI是已知的。我希望对/alphauser/目录本身的请求能够传递到Servlet/JSP,其他请求能够正常进行。我感谢您的帮助。我试过你的建议,
RewriteRule^/$http://backend/alphauser [P] 
并且它没有通过JSP获得
urlhttp://home/alphauser
。我查看了重写日志,结果显示:
将模式“^/$”应用于uri“”
,该模式的计算结果为false,因为字符串不是以
/
ok开头的,那么您的
^$
就可以了,您有权访问后端服务器吗?运气不好。mod_proxy已启用,因为我已经在apache2.conf中使用了ProxyPass和proxyreverseepass指令。实际上,正则表达式^$不匹配任何文件,只匹配目录。我对传递URI不感兴趣-.htaccess已经在alphauser目录中了-所以要传递的URI是已知的。我希望对/alphauser/目录本身的请求能够传递到Servlet/JSP,其他请求能够正常进行。我感谢您的帮助。我试过你的建议,
RewriteRule^/$http://backend/alphauser [P] 
并且它没有通过JSP获得
urlhttp://home/alphauser
。我查看了重写日志,它显示:
applyin