2012-01-11 122 views
1

我有一個重寫規則如下改寫,它工作:編碼特殊字符使用htaccess的

RewriteRule area/(.*) listing.php?area=$1 

但是,當我想在它使用%29,但是當我把它改寫如下,我得到404錯誤:

RewriteRule area/something%29/(.*)/ listing.php?area=$1 

逃離%29\%29也沒有工作。

回答

0

您要重寫的網址無效,因爲%29只能在Querystring中允許,而不能在URL中允許。你需要將%as跳轉爲%25(而不是反斜槓),所以得到的表達式將是...%2529 - 這應該起作用。

更多詳細信息,請查看RFC2396

+0

謝謝您的回答,但問題一直沒有解決29%只是爲了example.I想編碼這個希伯來文字符,你way.Can知道爲什麼怎麼樣。在.htaccess中使用%編碼字符進行網址重寫。 – sunil 2012-01-11 16:49:07

+0

我不太明白你到底想要做什麼。然而,你可以嘗試使用[B]標誌(假設你使用Apache> = 2.2,我相信)來逃避反向引用,或者使用noescape標誌[NE]進行遊戲。更多信息可以在這裏找到:http://httpd.apache.org/docs/trunk/rewrite/flags.html。 – Olaf 2012-01-12 07:32:08

2

Apache% - 在嘗試應用重寫規則之前解碼url路徑。所以你不應該在你的RewriteRule中使用%-encoding。只需使用正常字符。

所以在你的情況下,你應該只使用))然而,它是正則表達式中的一個特殊字符,因此您應該通過在前面添加斜槓來以RegEx方式將其轉義。所以它會變成\)

你上面的規則應該成爲:

RewriteRule area/something\)/(.*)/ listing.php?area=$1 
+2

特殊字符也可以寫成符號\ x29。 – Gerben 2012-01-11 19:38:22