2011-04-09 67 views
0

這是我第一次遇到這件事,我已經與Apache合作了13年。迷失在RewriteRule翻譯

我有這樣的重寫規則:

重寫規則^ /標籤/(.*)/$ /index.php?a=tagged &標籤= $ 1

很簡單,不是嗎? 以下是處理:如果「標記」的值包含urlencoded字符 - 它們只是在翻譯中丟失。走了,再見!

如果我輸入這樣的網址:/ tagged/c%2B%2B /這是urlencode C++ 的方法,那麼index.php會收到tags = c 的值。

當我在這樣的URL輸入c%直接2B%2B: /index.php?a=tagged &標籤= C%2B%2B那麼如果一切正常,高興地發現我的帖子標記C++

這是一個已知的問題嗎?什麼是解決方法?

回答

1

我有一個問題非常相似,這一次。這是我用來解決它的link。問題在於,正如鏈接所暗示的,在mod_rewrite執行其規則時,Apache已經使用了URL,因此當您將URL重寫爲PHP腳本時,PHP會將+解釋爲空格。

編輯:後已更新:

更新24日2009年8月:阿帕奇2.2.12包括B標誌來重寫規則,是爲了用於此問題。它是在2.2.7中引入的,但是直到2.2.12才能正確讀取更新日誌。感謝Michael Stillwell讓我知道。

+0

謝謝。我查看了$ _SERVER變量,它看起來像我可以使用$ _SERVER ['REQUEST_URI']這是原始URL,使用urlencoded值。有趣的是,在lighttpd服務器上,重寫規則不會導致這種種族滅絕。 – Dmitri 2011-04-09 23:09:03

0

你嘗試使用

RewriteRule ^/tagged/(.*)/$ /index.php?a=tagged&tags=$1 [NE] 

NE代表NoEscape。從來沒有使用它,所以不知道它是否不會轉義尚未urlencoded的字符,或只是寫非urlencoded字符並轉換那些。