2012-09-12 79 views
0

這是我的mod_rewrite規則的lighttpd:lighttpd的mod_rewrite的「在正則表達式是不工作

url.rewrite-once = (
    "^/label/([-'\./\+a-z0-9A-Z]+)/$" => "/index.php?page=label&label=$1", 
    "^/riddim/([-'\./\+a-z0-9A-Z]+)/$" => "/index.php?page=riddim&riddim=$1", 
    "^/([a-z]+)$" => "/index.php?page=$1", 
    "^/(!?pma)([a-z]+)/?$" => "/index.php?page=$1" 
) 

的問題是,字符」(39 .D)由於某種原因打破了鏈接,我得到一個404錯誤。

/riddim/Some+Thing+Here+9.38/ --> works, page is shown 
/riddim/Someone's+Stuff+Here/ --> fails, page not found 404 error 

我已經用「^/riddim爲底/(.+)/$」試着和它的作品,所以我想「更是打破了鏈接/ mod_rewrite的。 我甚至嘗試過轉義字符(使用:\'),儘管我從來沒有聽說過使用'作爲一些特殊字符的正則表達式引擎,但是也失敗了。

的lighttpd的是在Web服務器上運行的,在我的電腦上我使用的XAMPP與Apache,我設置了相同的正則表達式/規則存在,並且工作得很好:

RewriteEngine on 
RewriteRule ^/label/([-'\./\+a-z0-9A-Z]+)/$ /index.php?page=label&label=$1 
RewriteRule ^/riddim/([-'\./\+a-z0-9A-Z]+)/$ /index.php?page=riddim&riddim=$1 
RewriteRule ^/([a-z]+)$ /index.php?page=$1 

我在做什麼錯?

+0

它做什麼_does_? 「作品」vs「失敗」有點鬆動。它如何失敗? – FrankieTheKneeMan

+0

好吧,如果鏈接包含'char,則正則表達式失敗,因此它會將您發送到404錯誤而不是頁面。下面是這個例子:[WORKING](http://riddimbase.net/riddim/Do+You+Love/)[FAILING](http://riddimbase.net/riddim/Don't+Let+Them/) - 它肯定是一個正則表達式的問題,因爲用^/riddim /(.+)/$替換正則表達式使它適用於這兩個鏈接,但我不明白爲什麼正則表達式不匹配 – phew

回答

1

問題在於'即使我的瀏覽器仍然顯示爲',網址編碼爲%27',這就是爲什麼正則表達式不匹配,因爲字符組不包含%。

新的正則表達式看起來像

"^/riddim/([-'\./\+a-z\%0-9A-Z]+)/$" 

和工作就像一個魅力!

+0

不要忘記標記答案爲接受然後。 – j0k

+0

我接受它,但我不能48小時。還剩下7個小時,直到我可以接受我自己的答案。 – phew