【问题标题】:Maintaining the query string with mod_rewrite使用 mod_rewrite 维护查询字符串
【发布时间】:2011-02-11 00:49:24
【问题描述】:

我已正确配置我的网站以重新路由来自的每条流量

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很糟糕:例如,试图访问这个url:

www.mywonderfulwebsite.com/folder1/atextfile.txt

重定向到

folder1.mywonderfulwebsite.com/atextfile.txt&

实际上,mod_rewrite 会附加尾随的 &

我该如何解决这个问题? 如何正确重定向到正确的(也带有 GET 参数)url?

非常感谢

【问题讨论】:

标签: apache .htaccess mod-rewrite


【解决方案1】:

只需将 [QSA] 标志添加到您的其他标志即可自动附加 [Q]uery [S]tring [A]。

[L,R=301,QSA]

【讨论】:

  • 我忘了问你一件事:目前,我也在尝试将流量从 domain.com 重定向到 www.domain.com,这样:RewriteEngine On RewriteCond %{HTTP_HOST} ^domain\.com RewriteRule (.*) domain.it/$1 [L,R=301,QSA] 但是,如果我尝试访问 domain.com(带有斜杠),mod_rewrite 将我发送到 domain.com/(带有两个斜杠)。如何避免这个问题呢?
  • 更改您的模式以不在匹配部分中包含斜线^/?(.*) 或更改目标以不添加斜线http://www.domain.com$1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 2013-01-22
  • 1970-01-01
  • 2012-10-02
  • 2011-03-11
  • 1970-01-01
相关资源
最近更新 更多