【问题标题】:apache2 rewrite rule without changing URLapache2重写规则而不更改URL
【发布时间】:2014-08-10 20:12:59
【问题描述】:

以下重写重定向 localhosthttp://www.example.com/?id=211&test=1 但我希望浏览器上的 localhost 不应更改,但页面将来自上述链接。

我在我的 Apache conf 上使用了这个重写规则:

 RewriteEngine On
 RewriteCond %{HTTP_HOST} ^localhost$ [OR]
 RewriteRule ^/?$ http://www.example.com/?id=211&test=1 [L]

【问题讨论】:

    标签: apache .htaccess mod-rewrite url-rewriting apache2


    【解决方案1】:

    以下重写重定向 localhosthttp://www.example.com/?id=211&test=1 但我想要那个 localhost 浏览器不应更改,但页面将来自上述 链接。

    如果您想从其他地方加载页面而不链接 URL,mod_rewrite 是不适合这项工作的工具。请改用mod_proxy。首先像这样在Apache中启用它;示例假设您使用的是 Ubuntu 12.04,但应该可以在大多数 Linux Apache 安装上运行

    sudo a2enmod proxy proxy_http
    

    然后设置它以启用从您的根路径 /http://www.example.com/?id=211&test=1 的反向代理:

    <IfModule mod_proxy.c>
    
      # Proxy specific settings
      ProxyRequests Off
      ProxyPreserveHost On
    
      <Proxy *>
        AddDefaultCharset off
        Order deny,allow
        Allow from all
      </Proxy>
    
      ProxyPass / http://www.example.com/?id=211&test=1
      ProxyPassReverse / http://www.example.com/?id=211&test=1
    
    </IfModule>
    

    编辑: 好像mod_proxy and query strings 的目的地不要混合;强调我的:

    该指令允许将远程服务器映射到 本地服务器;本地服务器不充当代理 常规意义上,但似乎是远程服务器的镜像。 本地服务器通常称为反向代理或网关。路径 是本地虚拟路径的名称; url 是部分 URL 远程服务器并且不能包含查询字符串。

    因此,无论如何,您可以设置另一个页面(可能在localhost 上),它将在幕后反弹。这意味着这发生在localhost:

    ProxyPass / bounce.php
    

    然后文件,bounce.php 中可能包含这一行:

    <?php
      header('Location: http://www.example.com/?id=211&test=1');
    ?>
    

    这将允许mod_proxy 有一个有效的目的地。然后PHP文件进行重定向?很难说,但目标服务器上的查询字符串是问题所在。

    【讨论】:

    • @anubhava 谢谢!了解mod_proxy 改变了我的系统管理员生活。前端的 Apache 与后端任何端口上 100% 的其他任何东西。
    • 一个问题我忘了提到“在本地主机上我有 apache 运行”和 [link](example.com) nginx 正在运行。所以我现在在 localhost 上使用上述配置得到 404 Not Found 错误
    • @user3382916 这是怎么回事?然后localhost 启用了mod_proxy 的东西。然后http://www.example.com 的另一边可以是 100% 的其他任何东西。我一直使用它来将 Tomcat 流量从端口 8080 传输到端口 80 上的 Apache。效果很好。试验源和目标的设置。这是一个了不起的工具。
    • @user3382916 检查您从curl -I localhost 获得的信息。这显示了标题并可以帮助您调试。但这应该可行。
    • Considering dependency proxy for proxy_http: Module proxy already enabled Module proxy_http already enabled ERROR: Module enabled does not exist! 但是我在点击 localhost 时仍然收到 404 not Found 页面
    猜你喜欢
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    相关资源
    最近更新 更多