URL 重写:如何从 Apache 中的 URL 中删除电子邮件参数?

URL Rewrite: how to remove email parameters from an URL in Apache?

如何使用重写规则从 Apache 服务器上的 URL 中删除电子邮件参数?

基本上我需要删除 url 中存在的任何电子邮件参数,例如:

 www.example.com/?param_name=nobody@example.com

将改写为

www.example.com/

 www.example.com/?param_name_1=not_an_email&param_name_2=nobody@example.com

 www.example.com/?param_name_1=not_an_email

试试这些规则:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^(.+|)?&[^=]*=[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}((?:&(.*))|)$
RewriteRule (.*) ?%1%2 [NC,L]

RewriteCond %{QUERY_STRING} ^[^=]*=[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$
RewriteRule (.*) ? [NC,L]

RewriteCond %{QUERY_STRING} ^[^=]*=[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}(&|)((?:&(.*))|)$
RewriteRule (.*) ?%1%3 [NC,L]

已测试here

第一条规则匹配电子邮件地址之前和之后可选的其他参数的查询字符串,例如:

www.example.com/?param_name_1=not_an_email&param_name_2=nobody@example.com

www.example.com/?param_name_1=not_an_email&param_name_2=nobody@example.com&param_name_3=not_an_email

第二条规则匹配由单个参数(电子邮件地址)组成的查询字符串,例如:

www.example.com/?param_name=nobody@example.com

第三条规则匹配电子邮件地址为第一个参数,其他参数在后的查询字符串,例如:

www.example.com/?param_name_1=nobody@example.com&param_name_2=not_an_email

它最多只能匹配一个电子邮件地址。用于匹配电子邮件地址的正则表达式来自 here.