2010-11-18 30 views
1

我使用APACHE:mod_rewrite的定義一組規則rewritting URLS阿帕奇:mod_rewrite的:Spcaes和在URL中的特殊字符不工作

我想這個鏈接                                                                                                                       要被顯示爲

/myDIR/walls.php?f=All&of=0&s=Newest - >All.html

所以我用下面的規則

從(.htaccess)是否

RewriteEngine on 
RewriteBase /myDIR/ 
RewriteRule ^All\.html$ papers.php?f=All&of=0&s=Newest 

現在文本正在爲 f=Allof=0s=Newest通過這些變量這些被用於查詢,顯而易見,並且這些變量之一,即f所以metimes的值與空格和特殊字符,我不能避免,因爲數據庫已經就地,我所有的重寫網址....

現在當我嘗試這樣定義

我想這個鏈接                                                 規則3210                                                                                                                                要被顯示爲

/myDIR/walls.php?f=Characters & Supers&of=0&s=Newest - >Characters & Supers.html

這是不對的,我知道,因爲不應該有任何空格..所以作出正確選擇我這樣定義

RewriteRule ^Characters%20%26%20Supers\.html$ papers.php?f=Characters%20%26%20Supers&of=0&s=Newest 

它讓我定義規則的規則,但是當我點擊我的鏈接我得到 404未找到錯誤「請求的URL/wallz /字符& Supers.html在此服務器上未找到。」

問題:該怎麼辦?

我的猜測就是我不應該做的HTML URL編碼內的.htaccess

+0

來吧傢伙這是我的911 ..我需要這個工作第一件事在早上 – Moon 2010-11-18 14:24:49

回答

5

你的猜測是正確的。當URL到達mod_rewrite進行處理時,Apache已經爲您解碼了URL。因此,如果你想檢查任何其他編碼的字符,你需要使用它們的文字表示。

由於空格在這裏被用作一個分隔符,你也想需要逃避你的空間:

RewriteRule ^Characters\ &\ Supers\.html$ papers.php?f=%0&of=0&s=Newest 

我相信使用引號也將工作,所以下面應該是等價的(雖然它是未經測試):

RewriteRule "^Characters & Supers\.html$" papers.php?f=%0&of=0&s=Newest 

關於Apache解碼過程的最後一點是它會自動爲您刪除多個斜線。雖然與您的示例無關,但它是在達到mod_rewrite規則之前如何轉換URL的另一個示例。