htaccess - 将请求uri作为参数传递

时间:2014-10-31 16:44:37

标签: apache .htaccess mod-rewrite redirect url-redirection

我要做的是如下:

  1. 使用htaccess将用户重定向到另一个地址。
  2. 将给定的网址作为参数传递给新网址
  3. 因此,当用户访问 http://domainA.com/ 上的任何页面时 他应该被重定向到:http://domainB.com/?referer=http://domainA.com/

    我一直在失败的是,在重定向之前检索用户来自的完整网址。

    我尝试过的其中一件事悲惨地失败了:

    RewriteRule ^(.*)$ http://domainB.com/?referer=%{HTTP_HOST}%{REQUEST_URI}
    

    提前致谢!

    编辑: 我试图让我的问题变得简单,因为更复杂的问题往往没有答案, 所以我会提出我的问题,虽然对原来的有一个很好的答案。

    因此,要更具体地说明我正在努力实现的目标: 这两个域都托管在同一主机上,并指向完全相同的文件。 因此 domainA.com/file1.html domainB.com/file1.html 将显示相同的文件。

    我想要domainA做的是将所有请求传递给名为listener.php的文件。 所以对domainA的所有请求应该是这样的:

    1. 用户输入http://domainA.com/file1.html
    2. 幕后服务器请求实际上是:/ listener.php?actualRequest = http://domainA.com/file1.html
    3. 我希望此功能位于服务器端,以便网址保持正常。

      我去了2个域名,因为我想避免重定向循环。

1 个答案:

答案 0 :(得分:0)

您可以使用此规则:

RewriteCond %{HTTPS}s on(s)|
RewriteCond %{HTTP_HOST} ^(?:www\.)?domainA\.com$ [NC]
RewriteRule ^ http://domainB.com/?referer=http%1://%{HTTP_HOST}%{REQUEST_URI} [L,NE,R=302]

这会处理http://https://个网址。


编辑:根据编辑过的问题,您可以使用:

RewriteCond %{HTTPS}s on(s)|
RewriteCond %{HTTP_HOST} ^(?:www\.)?domainA\.com$ [NC]
RewriteRule !^listener\.php$ /listener.php?actualRequest=http%1://%{HTTP_HOST}%{REQUEST_URI} [L,QSA]