Apache的rewrire 中文字被編碼了
<IfModule mod_rewrite.c>
RewriteEngine On
#如果目录存在就直接访问目录不进行RewriteRule
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
如果把 RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 換成
RewriteRule !\.(js|ico|gif|jpg|JPG|png|css)$ index.php?url=$1 [QSA,L]
為了減不必要的導向所以改成了非圖檔或js、css這類的才丟到index.php
可是原本的中文字都很正常
改了之後 中文字都被改變成 %E5%81%A5%E8%A1%8C%E6%96%87%E5%8C%96
請問一下這個是什麼類型的編碼
有辦法讓它不要編碼嗎
rewrite 是無辜的。
%E5%81%A5%E8%A1%8C%E6%96%87%E5%8C%96 這叫 url encode。這是瀏覽器幹的好事,跟 rewrite 無關。你不能怪瀏覽器,因為這是 URL 標準格式。
只要在 index.php 中,使用 rawurldecode($_GET['url']) 就可以還原回來了。
題外話,希望你的 index.php 中有做路徑檢查。要不然你的程式可能有路徑遊走的安全漏洞。只要打 http://host/../../../../../etc/passwd 就有可能下載你的重要檔案。