apache2重写规则,不更改URL

时间:2014-06-20 06:14:43

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

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

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

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

1 个答案:

答案 0 :(得分:2)

  

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

如果您想从其他地方加载页面而不链接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文件进行重定向?很难说,但目标服务器上的查询字符串是个问题。