营销部门偶尔会发送一个邮件,其中包含带有多个问号的链接。
http://www.acme.com/site-page.jsp?content=mainpage?utm_campaign=somecampaign&utm_source=email
这会导致应用服务器将mainpage?utm_campaign
解释为参数,而不仅仅是mainpage
。有没有办法在Apache中拦截这些错误的URL并用?
替换第二个&
。
答案 0 :(得分:5)
您可以将此代码放入htaccess(必须位于根文件夹中)
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.+?)\?(.+)$
RewriteRule ^site-page\.jsp$ /site-page.jsp?%1&%2 [R=302,L]
此代码将重定向
/site-page.jsp?content=mainpage?utm_campaign=somecampaign&utm_source=email
到
/site-page.jsp?content=mainpage&utm_campaign=somecampaign&utm_source=email
现在你有了这些参数:
content
= mainpage
utm_campaign
= somecampaign
utm_source
= email
注意:随时将302
(临时)重定向更改为301(永久)重定向
修改
RewriteCond %{QUERY_STRING} ^(.+?)\?(.+)$
RewriteRule ^(.*)$ /$1?%1&%2 [R=302,L]
答案 1 :(得分:0)
我遇到的问题是我的查询字符串中可能出现多个附加问号。起初我开始为多个用例编写多个规则,但却发现找到NE|No Escape
标志。
RewriteCond %{QUERY_STRING} ^(.*)\?(.*)$
RewriteRule (.*) $1?%1&%2 [NE,R=302,L]
会做到这一点。
这样问号将被递归删除。这增加了对附加问号数量的请求数量,但将规则数量减少到一个。
我也改变了正则表达式。这样,在查询字符串的开头和结尾处的附加问号也将被替换。不是常见的情况,但如果我们只面对常见情况,我们根本不需要这些规则; - )