URL rewrite 的 + 與 %20 的問題

現在流行 Rewrite 讓網址美化,所以 Web server (Nginx、Apache...) 都會使用 rewrite module 來達成。

不過 Rewrite 常常會遇到各種符號的問題,例如下述:

上述在 Apache 的 mod_rewrite 會遇到的問題大概都解決了,但是現在遇到 Nginx + fastcgi 的模式,開始又有一些其它問題出現,如下範例:

  1. 標題: dvd player
  2. 網址自動轉換成: dvd+player
  3. 再到 PHP 端就用 dvd+player 去找,就找不到此篇文章
  4. 這問題要怎麼解決呢?

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

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料