1

我有一个网站,我们每月发送一份时事通讯。时事通讯订阅和取消订阅功能在另一个域上进行管理。

但是,为了保持时事通讯页脚“漂亮”,我希望取消订阅链接指示主域。

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”。

4

1 回答 1

1

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

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

来自Apache mod_rewrite 文档

默认情况下,查询字符串会原封不动地传递。但是,您可以在包含查询字符串部分的替换字符串中创建 URL。只需在替换字符串中使用问号来指示应将以下文本重新注入到查询字符串中。当您想删除现有的查询字符串时,只用问号结束替换字符串。要组合新旧查询字符串,请使用 [QSA] 标志。

更新:

如果这只能在 email= 存在时发生:

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

更新 2:

如果我现在了解所有这些,您想要捕获noemail并将其传递给email=in listdomain.com。要重写emailnoemail,您确实需要一个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]
于 2012-07-28T13:40:56.440 回答