如何使用htaccess获取查询并重定向到另一个URL(添加查询)?

时间:2012-07-28 12:41:10

标签: .htaccess redirect

我有一个网站,我们每月都会发送简报。 新闻订阅和取消订阅功能在另一个域上管理。

但是,为了使通讯页脚“非常”,我希望取消订阅链接指示主域名。

SO: 通过简报页脚链接:

http://maindomain.com/?email=some@email.com

但真的需要:

http://maindomain.com/?noemail=some@email.com

会将用户重定向到:

http://listdomain.com/members/?p=blacklist&email=some@email.com

这可能吗?

我一直在努力弄清楚如何:

RewriteRule ^(I HAVE NO IDEA*)$ /?email=$1&rewrite [L]
RewriteCond %{QUERY_STRING} email=(I HAVE NO IDEA*)$
GO TO THE OTHER URL SOMEHOW

依此类推,但我很无聊,已经读完了一整天。

非常感谢教这条老狗......

我可能会越来越近,但需要帮助:

RewriteCond %{QUERY_STRING} ^email=([^&]+)(&|$) [NC]
RewriteRule ^abc$ http://listdomain.com/members/?p=blacklist&email=%1? [R=301,L] 

我试过这个并且它有效但是,我担心它可能不是“最好的”方法。

RewriteCond %{QUERY_STRING} ^((?<!email=).*@.*)$
RewriteRule ^$ http://listdomain.com/members/?p=blacklist&%{QUERY_STRING} [R=301,L]

以上适用于电子邮件查询,但需要将原始查询中的“noemail”重写为“email”。

1 个答案:

答案 0 :(得分:1)

您只需添加[QSA]标志(查询字符串追加)即可将现有查询字符串添加到重定向中。应在添加的任何参数(p=blacklist

后附加IT
RewriteRule ^abc$ http://listdomain.com/members/?p=blacklist [R=301,L,QSA] 

来自Apache mod_rewrite docs

  

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

更新

如果只有在email =存在时才会发生这种情况:

RewriteCond %{QUERY_STRING} email=(.+)
RewriteRule ^abc$ http://listdomain.com/members/?p=blacklist [R=301,L,QSA] 

更新2:

如果我现在了解所有这些内容,您希望捕获noemail并将其传递给email=中的listdomain.com。 要将email重写为noemail,您执行需要一个RewriteCond来捕获参数。

# capture email into %1
RewriteCond %{HTTP_HOST] ^maindomain.com$
RewriteCond %{QUERY_STRING} noemail=([^&]+)
RewriteRule ^$ http://listdomain.com/members/?p=blacklist&email=%1 [R=301,L]