場景
http://www.domain.com/redirect.action?url=xxx
發送給用戶的是上面的鏈接,用戶點擊後跳到redirect.action裏進行一些處理,然後重定向到url
坑1
url爲http://www.real.com?name=zhangsan&age=40
實際鏈接http://www.domain.com/redirect.action?url=http://www.real.com?name=zhangsan&age=40
點擊這個鏈接後你會發現,重定向的鏈接裏沒有age=40這個參數,因爲這個參數當做整個鏈接的參數,而不是url的一個參數
坑2
url爲http://www.real.com/#/test ,鏈接中包含#,爲了避免搜索引擎抓取
實際鏈接http://www.domain.com/redirect.action?url=http://www.real.com/#/test
點擊這個鏈接後你會發現,重定向的鏈接裏#和後面的內容都丟失了,因爲#實際上再html中相當於一個錨點
解決辦法,將url進行編碼
URLEncoder.encode("url", "UTF-8");
使用的編碼格式依據你web容器對url的編碼格式而定,例如tomcat下面的配置,會自動將url採用utf-8解碼
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>