【问题标题】:Mod-rewrite rule for external pages?外部页面的修改重写规则?
【发布时间】:2020-10-23 02:08:55
【问题描述】:

是否可以使用 mod_rewrite 来解析托管在另一台服务器上的地址?

假设我想设置这个 URL:

http://www.myserver.com/myfolder/

要真正解决:

http://www.anotherserver.com/anotherfolder/

如果是这样,您能否提供一个 RewriteRule 示例?

【问题讨论】:

    标签: mod-rewrite cross-domain


    【解决方案1】:

    您可以在mod_rewrite 规则中使用P flag 来获取mod_proxy 请求的替换URL:

    RewriteEngine on
    RewriteRule ^myfolder/$ http://other.example.com/anotherfolder/ [P]
    

    现在,当客户端向您的服务器请求 /myfolder/ 时,它将请求 http://other.example.com/anotherfolder/ 并将该服务器的响应发送回客户端。

    【讨论】:

    • 值得注意的是,您现在还需要包含 mod_proxy_http 模块。
    • @Christian 您能否提供更多详细信息,说明“包含 mod_proxy_http 模块”的含义?
    • 嗨@user1111929,见这里; httpd.apache.org/docs/2.4/mod/mod_proxy_http.html - 在此重写工作之前需要启用此模块。
    • 根据文档如果他只想重定向,那么 [P] 标志是不必要的 - [P] 通过内部代理进行,而没有它只是进行外部重定向.. 但也许我误解了他的“解决”是什么意思
    【解决方案2】:

    不,隧道是不可能的,您必须为此使用 CGI 脚本。但是,您可以重定向

    RewriteRule  ^(.*)  http://new.example.com/$1
    

    带或不带 [R] 标志,它会自动将用户重定向到新域。

    编辑:显然可以使用mod_proxy[P] 标志来隧道请求。请参阅 Gumbo 的回答。

    【讨论】:

    • 很酷,谢谢,在这种情况下用户会看到刷新吗? (即:地址栏将显示new.example.com)。当你说我需要一个 CGI 脚本时,你能给我一些关于我应该寻找什么的线索吗?欢呼
    • 是的,用户会看到新的 URL。如果你不想要这个,谷歌(或在 StackOverflow 上搜索)“代理软件”。
    • 是否 [P] 标志不允许隧道,或者更确切地说...代理?
    【解决方案3】:

    嘿,我试过重写但没有用(只是在 localhost 中测试过)

    我也觉得这个方法很简单

    Redirect /myfolder external_url
    

    【讨论】:

    • 为什么投反对票?虽然它不使用mod_rewrite,但它就像一个魅力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多