保留查询字符串的htaccess重定向

时间:2016-08-19 16:57:44

标签: apache .htaccess redirect mod-rewrite

我想通过.htaccess重定向发生的事情是:

网址请求:“http://subdomain1.mysite.com/addToBasket.php?query_string

被重定向到

http://subdomainA.subdomain1.mysite.com/addToBasket.php?query_string

子域'subdomain1'和'subdomainA.subdomain1'在DNS中正确设置为完全限定的域名

但是,subdomain1.mysite.com存在于不同的服务器而不是subdomainA.subdomain1.mysite.com上 - 因此始终需要绝对的网址格式。

在请求站点子域目录中,'addToBasket.php'脚本文件将不存在,但将存在于重定向到子域目录中

请求的查询字符串是通配符,但在重定向期间不得更改。

我搜索并尝试了许多示例解决方案 - 但重定向中始终忽略'?query string'部分。

subdomain1 =>的原因subdomainA.subdomain1疯狂和不同的服务器是在新服务器上启动一个新站点,带有一个全新的启动数据库,但旧站点生成了篮子相关的电子邮件给客户,其中包含他们点击以完成订单处理的链接 - 所以旧站点将仍旧托管在旧服务器上一段时间,但在子域下,只是为了让这些电子邮件链接仍然在野外与他们设计的系统一起工作。

不幸的是,新开发人员创建了一个与旧网站中使用的类似命名的子域系统 - 因此旧网站现在将具有'subdomain.subdomain'网址格式,以允许它具有不同的IP和功能。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

除非您明确覆盖查询字符串,否则它将自动保留,请参阅RewriteRule

  

修改查询字符串

     

默认情况下,查询字符串不会更改。但是,您可以在包含查询字符串部分的替换字符串中创建URL。只需在替换字符串中使用问号,即表示应将以下文本重新注入查询字符串。如果要删除现有查询字符串,请仅使用问号结束替换字符串。要组合新旧查询字符串,请使用[QSA]标志。

这意味着,如果您只是在不自行添加查询字符串的情况下进行重定向,则会传递它,例如

RewriteRule ^addToBasket.php$ http://subdomainA.subdomain1.mysite.com/addToBasket.php [L]

或者如果你想重定向不仅仅是这个,而是每个可能的请求

RewriteRule ^ http://subdomainA.subdomain1.mysite.com%{REQUEST_URI} [L]