2014-03-06 18 views
0

我一直在開發一個店,它使用了mod_rewrite,讓我們做出的URI的可讀性,例如:的mod_rewrite和點的URI的END

http://www.example.com/shop/Tools

將被改寫,以

http://www.example.com/index.php?area=shop&folder=Tools

我重寫規則如下:

RewriteRule ^shop/([^?#]+) index.php?area=shop&folder=$1 [NC,QSA,L]

但是,當文件夾名稱結束時會中斷。 (點),正如我在用「等」結尾的文件夾名稱進行測試時發現的那樣。

$_GET已被填充之前,似乎任何尾隨點都被刪除。如果我在點後面加上另一個字符,那麼很好,如果URI以任意數量的點結尾,它們將被刪除

有沒有辦法阻止這種情況發生?

+1

衛生署,一直在尋找的年齡,並沒有發現這些, http://stackoverflow.com/questions/16383339/mod-rewrite-with-網址後期 http://stackoverflow.com/questions/11144079/apache-mod-rewrite-ending-periods – Pez

+0

實際上,多一點挖掘和測試顯示,這是一個Windows唯一的問題,如果任何人都可以擺脫這一點,我會很感激 – Pez

回答

0

您不需要排除「?」和RewriteRule中的「#」,因爲它僅在URI(路徑)上運行,而沒有查詢字符串或錨點。

所以,這是不夠的:

RewriteRule ^shop/(.+) index.php?area=shop&folder=$1 [NC,QSA,L] 

話雖這麼說,這並沒有改變的事實,獲得剝奪。

這可能是MultiViews處於打開狀態的結果。這個選項讓Apache嘗試並解析URI而不考慮擴展名。

因此,添加此還有:

Options -Multiviews 
+0

感謝Poncha,雖然沒有幫助 – Pez

+0

顯然這是一個Windows問題rver) – Pez

+0

那麼,您可以使用您找到的其中一個鏈接提供的解決方案,然後解析'REDIRECT_URI'(內部php)以解決此問題。這是如果你關心它在Windows上運行;) – poncha