現在流行 Rewrite 讓網址美化,所以 Web server (Nginx、Apache...) 都會使用 rewrite module 來達成。
不過 Rewrite 常常會遇到各種符號的問題,例如下述:
上述在 Apache 的 mod_rewrite 會遇到的問題大概都解決了,但是現在遇到 Nginx + fastcgi 的模式,開始又有一些其它問題出現,如下範例:
- 標題: dvd player
- 網址自動轉換成: dvd+player
- 再到 PHP 端就用 dvd+player 去找,就找不到此篇文章
- 這問題要怎麼解決呢?
URL rewrite 的 + 與 %20 的問題
"dvd player" = "dvd+player" = "dvd%20player" 等問題,在 Apache2 的 mod_rewrite 可以加入下述參數搞定:
- AllowEncodedSlashes On
但是在 Nginx + PHP-FPM 等等的,要怎麼解決呢?
解法1 (接收端解法)
- 接到的參數多做一次 urldecode();
- ex: $GET['title'] = urldecode($GET['title']);
解法2 (產生端解法)
- 將所有程式連結的部份,urlencode() 捨棄,一律使用 rawurlencode()
- 我是採用此種解法,目前看起來沒有衍生出其它問題。
- 註:+ 與 %20 都是空白,相關的說明請參照此篇:PHP rawurlencode 與 urlencode 的差異
Save