我試圖通過RewriteRule
建立一個友好的URL,但它始終忽略#
作爲變量值的一部分。
上的.htaccess該生產線是因爲這重寫規則和數字符號「#」
RewriteRule ^key/(.+)/$ index.php?key=$1
簡單並且請求的URL是
http://www.example.com/key/c%23/
但我只得到c
爲得到變量,而不是c%23
。
我究竟做錯了什麼?
我試圖通過RewriteRule
建立一個友好的URL,但它始終忽略#
作爲變量值的一部分。
上的.htaccess該生產線是因爲這重寫規則和數字符號「#」
RewriteRule ^key/(.+)/$ index.php?key=$1
簡單並且請求的URL是
http://www.example.com/key/c%23/
但我只得到c
爲得到變量,而不是c%23
。
我究竟做錯了什麼?
最後經過一些挖掘,我設法把它取消。
它只是需要上重寫規則的B
標誌逃離非字母數字字符,如#
RewriteRule ^key/(.+)/$ index.php?key=$1 [B]
%23
是一個散列符號(#
),所以它(以及其後的任何東西)實際上都不會被mod_rewrite解析。因此實際的URL是http://www.foo.com/key/c
,沒有任何%23
。不過,其他的破折號工作正常。
%23
是散列標記(#)。我猜測瀏覽器正在將散列解釋爲錨點,而不是將它傳遞給服務器。例如,如果你用戶http://www.foo.com/key/c%20/
,你會得到「c [空間]」。
但我怎麼能繞過解釋和使用'%23'就像堆棧溢出呢? (http://stackoverflow.com/questions/tagged/c%23) – GRaecuS 2011-05-21 07:08:18
當請求到達modrewrite時,#字符通常需要被轉換爲%23。但是,[B]選項是正確的選項,以便%23得到正確的重寫。 – John 2013-09-19 05:22:51