如何使用重写规则从Apache服务器上的URL中删除电子邮件参数?
基本上我需要删除网址中存在的任何电子邮件参数,例如:
www.example.com/?param_name=nobody@example.com
将被重写为
www.example.com/
或
www.example.com/?param_name_1=not_an_email¶m_name_2=nobody@example.com
到
www.example.com/?param_name_1=not_an_email
答案 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¶m_name_2=nobody@example.com
或
www.example.com/?param_name_1=not_an_email¶m_name_2=nobody@example.com¶m_name_3=not_an_email
第二条规则匹配由单个参数组成的查询字符串,例如:
www.example.com/?param_name=nobody@example.com
第三条规则匹配查询字符串,其中电子邮件地址是第一个参数,其他参数如下:例如:
www.example.com/?param_name_1=nobody@example.com¶m_name_2=not_an_email
它只匹配一个电子邮件地址最大值。匹配电子邮件地址的正则表达式来自here。