我有一个网站,我们每月都会发送简报。 新闻订阅和取消订阅功能在另一个域上管理。
但是,为了使通讯页脚“非常”,我希望取消订阅链接指示主域名。
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”。
答案 0 :(得分:1)
您只需添加[QSA]
标志(查询字符串追加)即可将现有查询字符串添加到重定向中。应在添加的任何参数(p=blacklist
)
RewriteRule ^abc$ http://listdomain.com/members/?p=blacklist [R=301,L,QSA]
默认情况下,查询字符串不会更改。但是,您可以在包含查询字符串部分的替换字符串中创建URL。只需在替换字符串中使用问号,即表示应将以下文本重新注入查询字符串。如果要删除现有查询字符串,请仅使用问号结束替换字符串。 要合并新旧查询字符串,请使用[QSA]标记。
如果只有在email =存在时才会发生这种情况:
RewriteCond %{QUERY_STRING} email=(.+)
RewriteRule ^abc$ http://listdomain.com/members/?p=blacklist [R=301,L,QSA]
如果我现在了解所有这些内容,您希望捕获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]