使用mod_rewrite保留查询字符串

3
我已经正确地配置了我的网站,以便将来自 mywonderfulwebsite.com/folder1/whatever-url.php 的所有流量重定向到 http://folder1.mywonderfulwebsite.com/whatever-url-as-above.php。
问题是:很多时候,外部网站链接到带有 GET 参数的页面,例如 mywonderfulwebsite.com/folder1/whatever-url.php?trackingToken=1。
所以,问题是如何使 mod_rewrite 将 GET 参数传递到“重写”的 URL 中,就像这样:
folder1.mywonderfulwebsite.com/whatever-url-as-above.php?trackingToken=1
目前,我正在执行以下操作:
<VirtualHost *>
   ServerName mywonderfulwebsite.com
   ServerAlias www.mywonderfulwebsite.com
   DocumentRoot /var/www/mywonderfulwebsite/
   DirectoryIndex index.html

   <Directory />
      allow from all
      Options +FollowSymlinks -Indexes
   </Directory>

   RewriteEngine On
   RewriteRule    ^/folder1/(.*)?$    http://folder1.mywonderfulwebsite.com/$1&%{QUERY_STRING}    [L,R=301]
</VirtualHost>

这个htaccess代码有问题:例如,尝试访问以下网址:

www.mywonderfulwebsite.com/folder1/atextfile.txt

将重定向到

folder1.mywonderfulwebsite.com/atextfile.txt&

实际上,mod_rewrite在末尾添加了&符号

如何解决这个问题?如何正确地重定向到正确的(同时带有GET参数)网址?

非常感谢。


问号后面的部分被称为“查询字符串”,“GET”是HTTP方法。 - Dan Grossman
你是对的,php中使用太多$_GET了 :) 感谢你的澄清。 - Array
如何在mod_rewrite规则中保留现有的查询字符串? - outis
1个回答

6
只需将 [QSA] 标志添加到其他标志中,即可自动附加查询字符串。
[L,R=301,QSA]

我忘了问你一件事: 目前,我也正在尝试将来自domain.com的流量重定向到www.domain.com,方法如下:RewriteEngine On RewriteCond %{HTTP_HOST} ^domain.com RewriteRule (.*) http://www.domain.it/$1 [L,R=301,QSA]但是,如果我尝试访问http://domain.com/(带有尾随斜杠),mod_rewrite会将我发送到http://www.domain.com//(带有两个尾随斜杠)。如何避免这个问题? - Array
将您的模式更改为不在匹配部分中包括斜杠“^ /?(.*)”,或更改目标以不添加斜杠“http://www.domain.com$1”? - Dan Grossman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接