首先,說一下情況:
1、我本地用的是Apache,伺服器上用的是Nginx。
2、設定的偽靜態起作用,沒有問題。
3、PHP代碼。
有個tag標籤功能,其中有tag中文標籤,我想讓連結是中文的形式出現,就像本站上的這個連結一樣。
http://segmentfault.com/t/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BE%E8%AE%A1
在瀏覽器和滑鼠移至上方在連結上的時候,效果是如下:
http://segmentfault.com/t/資料庫設計
當然中文是通過urlencode("資料庫設計")得到的字串是:%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BE%E8%AE%A1
真正的問題來了:
當我使用了偽靜態後,發現自動把 “%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BE%E8%AE%A1” urldecode解碼了。
在網上找了好多資料,說是只要urlencode(urlencode("資料庫設計"))就行了,沒錯,雖然管用了。但是這樣的話就不如我直接使用這個標籤id就好了,比如http://segmentfault.com/t/123。但是我想要的是顯示中文,就和本站的效果一樣。
舉個例子,偽靜態代碼如下:
RewriteCond %{QUERY_STRING} ^(.*)$RewriteRule ^(.*)/abc/([\w_\-\%\|\!\,\#]+)$ $1/abc.php?tag=$1&%1 [L]
那麼如何才能禁止apache和Nginx自動把字串解碼呢?
回複內容:
首先,說一下情況:
1、我本地用的是Apache,伺服器上用的是Nginx。
2、設定的偽靜態起作用,沒有問題。
3、PHP代碼。
有個tag標籤功能,其中有tag中文標籤,我想讓連結是中文的形式出現,就像本站上的這個連結一樣。
http://segmentfault.com/t/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BE%E8%AE%A1
在瀏覽器和滑鼠移至上方在連結上的時候,效果是如下:
http://segmentfault.com/t/資料庫設計
當然中文是通過urlencode("資料庫設計")得到的字串是:%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BE%E8%AE%A1
真正的問題來了:
當我使用了偽靜態後,發現自動把 “%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BE%E8%AE%A1” urldecode解碼了。
在網上找了好多資料,說是只要urlencode(urlencode("資料庫設計"))就行了,沒錯,雖然管用了。但是這樣的話就不如我直接使用這個標籤id就好了,比如http://segmentfault.com/t/123。但是我想要的是顯示中文,就和本站的效果一樣。
舉個例子,偽靜態代碼如下:
RewriteCond %{QUERY_STRING} ^(.*)$RewriteRule ^(.*)/abc/([\w_\-\%\|\!\,\#]+)$ $1/abc.php?tag=$1&%1 [L]
那麼如何才能禁止apache和Nginx自動把字串解碼呢?
你這個Rewrite應該不會英文中文產生歧義吧,只是你配置Rewrite參數裡只識別了encode形式的文字,所以導致了不能重新向而已吧。
你可以直接在正則裡接受所有字元,這樣就可以正常運行了。
另外,自動解碼應該是瀏覽器完成的,不是WebServer控制的。