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

Posted

技术标签:

【中文标题】添加代理通行证后,apache重写规则不起作用【英文标题】:apache rewrite rules are not working after adding proxy pass 【发布时间】:2015-02-14 15:42:15 【问题描述】:

我正在尝试重写 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】:

您需要将[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。因此,如果您可以指定哪个是正确的,那将有所帮助。

【讨论】:

以上是关于添加代理通行证后,apache重写规则不起作用的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 到 HTTPS Apache 重写不起作用

Apache 重写目录索引

使用代理通行证的 Nginx 重写规则

Charles Web 调试代理重写不起作用

规则重写不起作用 - 不错的网址

静态文件的 Apache 代理通行证