2011-05-20 86 views
6

我試圖通過RewriteRule建立一個友好的URL,但它始終忽略#作爲變量值的一部分。
上的.htaccess該生產線是因爲這重寫規則和數字符號「#」

RewriteRule ^key/(.+)/$ index.php?key=$1 

簡單並且請求的URL是

http://www.example.com/key/c%23/ 

但我只得到c爲得到變量,而不是c%23

我究竟做錯了什麼?

回答

4

最後經過一些挖掘,我設法把它取消。

它只是需要上重寫規則的B標誌逃離非字母數字字符,如#

RewriteRule ^key/(.+)/$ index.php?key=$1 [B]
+0

當請求到達modrewrite時,#字符通常需要被轉換爲%23。但是,[B]選項是正確的選項,以便%23得到正確的重寫。 – John 2013-09-19 05:22:51

0

%23是一個散列符號(#),所以它(以及其後的任何東西)實際上都不會被mod_rewrite解析。因此實際的URL是http://www.foo.com/key/c,沒有任何%23。不過,其他的破折號工作正常。

0

%23是散列標記(#)。我猜測瀏覽器正在將散列解釋爲錨點,而不是將它傳遞給服務器。例如,如果你用戶http://www.foo.com/key/c%20/,你會得到「c [空間]」。

+1

但我怎麼能繞過解釋和使用'%23'就像堆棧溢出呢? (http://stackoverflow.com/questions/tagged/c%23) – GRaecuS 2011-05-21 07:08:18