2011-11-08 70 views
0

你好我的重寫規則有時是因爲我的網址有%符號在其中。正則表達式規則匹配%登錄爲Apache mod重寫url

比如這個網址:

http://www.chillisource.co.uk/product/Grocery/Dr.%20Burnoriums%20Psycho%20Juice/1/B005MSE5KG/Psycho_Juice_70%_Ghost_Pepper 

這是我的重寫規則:

RewriteRule ^product/([a-zA-Z]+)/([\sa-zA-Z0-9\-\+\.]+)/([0-9]+)/([A-Z0-9]+)/([a-zA-Z0-9]+) /product?&cat=$1&q=$2&page=$3&prod=$4&prodName=$5 

我如何修改5章([A-ZA-Z0-9] +)不產品名稱中有%時會失敗嗎?

在此先感謝。

+0

我假設你已經試過「([a-zA-Z0-9 \%] +)」? –

+0

@Truth你是對的...我有同樣的想法,約2秒後點擊按鈕。 –

回答

1

也許,它不是%20,而是空間。也就是說,URL傳遞給重寫adter urldecoding。如果不是,則只需在該範圍中添加百分號即可。 (如果是 - 空間)。

0

----忘了這部分,我誤解了這個問題----

從我從mod_rewrite的文檔得到(http://httpd.apache.org/docs/current/mod/ mod_rewrite.html),你不應該有應對的十六進制編碼字符(我認爲從下面的語句:

THE_REQUEST 由瀏覽器發送到服務器(完整HTTP請求行如,「GET/index.html HTTP/1.1「)。這不包括瀏覽器發送的任何額外頭文件。該值尚未被轉義(解碼) ,不像以下的大多數其他變量。

事實上,使用mod_rewrite實際上是不可能的,因爲你不得不處理這個到處,例如,你可以寫41%,而不是「A」。

---但以下靜止是真的---

但你重寫規則不能工作,至少不能與您發佈的請求URL:正規表達式「的最後一部分([一-zA-Z0-9] +)「是FAR太嚴格。在這種情況下,它失敗的原因如下:

  • 它缺乏一個處理百分號的,如「70%」
  • 你忘了,包括下劃線「_」

嘗試添加至少這兩個字符(「[a-zA-Z0-9%_] +」),它應該工作。

+0

(「[a-zA-Z0-9%_] +」)也不起作用...... :(我該如何讓我的正則表達式不那麼嚴格,是否可以讓它通過? –