【问题标题】:apache rewrite with proxypassapache用proxypass重写
【发布时间】:2012-10-06 01:42:27
【问题描述】:

我正在尝试将重写和代理通行证结合起来,并且遇到了重写问题。这是我所拥有的

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.world.net
RewriteRule %{HTTP_HOST} http://newexample.newworld.net:7802/apex/f?p=208 [R,P]
ProxyPass / http://newexample.newworld.net:7802/

proxypass 正在工作,但我不知道如何获得初始重定向。因此,如果用户输入 example.world.net/apex/f?p=208 它会转到 newexample.newworld.net:7802/apex/f?p=208 并屏蔽 url。

但是,如果 apex/f?p=208 不在 URL 中,我需要让 example.world.net 重定向到 example.world.net/apex/f?p=208。

【问题讨论】:

    标签: apache mod-rewrite rewrite proxypass


    【解决方案1】:

    您不能同时重定向代理。您的重写规则标志是[R,P],即“重定向”和“代理”。你在这里需要一个或另一个。此外,您的规则的正则表达式永远不会匹配%{HTTP_HOST},除非您的 URL 字面意思是:http://example.world.net/%{HTTP_HOST}。您需要将其更改为:

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^example.world.net
    RewriteCond %{QUERY_STRING} !(^|&)p=208(&|$)
    RewriteRule ^/?$ /apex/f?p=208 [L,QSA,R]
    

    如果 URL 地址栏显示 http://example.world.net/http://example.world.net/apex/f?p=208,这将重定向浏览器。然后,由代理获取/apex/f?p=208 并将其代理到http://newexample.newworld.net:7802/

    mod_proxy 和 mod_rewrite 有可能不能很好地配合使用,因为两者最终会被应用到同一个 URL。如果您发现两者同时被应用,则将ProxyPass 行更改为:

    RewriteRule ^/?(.*)% http://newexample.newworld.net:7802/$1 [L,P,QSA]
    

    【讨论】:

    • 这很好用。我不必添加您提到的最后一次重写。它与proxypass一起使用。谢谢
    【解决方案2】:

    所以您希望 example.world.net 重定向到 http://newexample.newworld.net:7802/apex/f?p=208 或 example.world.net/apex/f?p=208 ?我假设前者,如果我错了将 RewriteRule 中的 url 更改为后者。

    但我认为应该这样做

    RewriteCond %{HTTP_HOST} ^example.world.net$ [NC]
    RewriteRule %{HTTP_HOST} http://newexample.newworld.net:7802/apex/f?p=208 [R,L]
    

    但是不知道你的虚拟主机的名称/别名是什么,所以 / 在

    ProxyPass / http://newexample.newworld.net:7802/

    可能会破坏一切。

    【讨论】:

    • 对不起,它不起作用 example.world.net 没有被重定向到 example.world.net。它保持不变,并且在后端转到 newexample.newworld.net:7802。
    猜你喜欢
    • 2013-07-01
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 2018-02-12
    相关资源
    最近更新 更多