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

时间:2015-05-14 06:23:29

标签: regex apache .htaccess mod-rewrite url-rewriting

如何使用重写规则从Apache服务器上的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

1 个答案:

答案 0 :(得分:1)

请尝试以下规则:

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