有時市場部門會發送一封郵件,其中包含帶有多個問號的鏈接。mod_rewrite多個問號
http://www.acme.com/site-page.jsp?content=mainpage?utm_campaign=somecampaign&utm_source=email
這將導致應用程序服務器解釋mainpage?utm_campaign
作爲參數,而不是僅僅mainpage
。有沒有辦法在Apache中攔截這些錯誤的網址,並用&
替換第二個?
。
有時市場部門會發送一封郵件,其中包含帶有多個問號的鏈接。mod_rewrite多個問號
http://www.acme.com/site-page.jsp?content=mainpage?utm_campaign=somecampaign&utm_source=email
這將導致應用程序服務器解釋mainpage?utm_campaign
作爲參數,而不是僅僅mainpage
。有沒有辦法在Apache中攔截這些錯誤的網址,並用&
替換第二個?
。
你可以把這段代碼在你的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]
我遇到了在查詢字符串中可能出現多個附加問號的問題。起初,我開始爲多個用例編寫多條規則,但是發現要找到NE|No Escape
標誌。
RewriteCond %{QUERY_STRING} ^(.*)\?(.*)$
RewriteRule (.*) $1?%1&%2 [NE,R=302,L]
將做的伎倆。
這樣,問號將被遞歸移除。這會將請求數量增加到額外問號的數量,但將規則的數量減少到一個。
我也改變了正則表達式。這樣,查詢字符串開頭和結尾的其他問號也將被替換。不是一般情況,但如果我們只面臨常見情況,我們完全不需要這些規則;-)
您是否能夠解僱營銷團隊? – Bobulous 2014-09-19 15:34:09