添加代理通行证后,Apache 重写规则不起作用



>我正在尝试重写 apache 中的 URL,该 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:8080/myapp/my.html

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

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

您需要

[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.重定向是一种外部响应,浏览器请求新的 URL 并且浏览器地址栏中的文本将更改。

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

最新更新