添加代理传递后,apache重写规则不起作用

时间:2014-12-16 10:44:09

标签: mod-rewrite httpd.conf apache2.2

我正在尝试重写apache中的url,它在内部将请求重定向到apache tomacat

这是我的httpd.conf代码

<IfModule mod_rewrite.c>

    ProxyRequests Off
    ProxyVia Off
    ProxyPreserveHost On
    ProxyPass / http://localhost:8080/myapp/my.html
    ProxyPassReverse / http://localhost:8080/myapp/my.html

    RewriteEngine on 
    RewriteRule ^/(.*)/$ http://localhost:8080/myapp/my.html?product=$1 [QSA]
 </IfModule>

所以基本上我想要做的是如果我输入localhost / myapp然后它应该重定向到localhost:8080 / myapp / my.html

接下来是如果我输入url localhost / myapp / 8,它应该在内部重定向到localhost:8080 / myapp / my.html?product = 8。

现在问题是ProxyPass工作正常。但重写规则显示404错误。 如果我删除ProxyPass代码然后相同的重写规则工作,但它在浏览器中显示修改的URL。 所以我想知道我应该在哪里放置RewriteRule以使其与ProxyPass一起使用,并且重写规则显示修改后的URL?

1 个答案:

答案 0 :(得分:1)

您需要将[P]标记添加到RewriteRule。这导致RewriteRule'代理'与ProxyPass指令的方式相同。目前你的规则没有任何意义。或者你也可以这样做:

RewriteRule ^/(.*)/$ /myapp/my.html?product=$1 [QSA,PT]

这应该导致URL被重写,然后通过(这是因为PT标志)传递给任何需要处理URI路径的剩余模块,在这种情况下是代理模块。

当你说if i enter localhost/myapp then it should redirect me to localhost:8080/myapp/my.html时,你的术语是错误的if i enter localhost/myapp then it should proxy to localhost:8080/myapp/my.html localhost/。重定向是一种外部响应,它会阻止浏览器请求新的URL,浏览器地址栏中的文本也会发生变化。

请注意,根据您当前的配置,请求localhost:8080/myapp/my.html会代理{{1}}。因此,如果您可以指定哪个是正确的,那将有所帮助。