2016-07-25 206 views
5

Htaccess以某種方式自動剔除網址末尾的所有尾部斜槓並僅保留一個。Htaccess重寫刪除尾部斜槓

例如http://localhost/api/param1///成爲http://localhost/api/param1/

能否請你告訴我,爲什麼出現這種情況,如何擺脫呢? (。*)應該匹配一切正確嗎?但事實並非如此。就像我說的,如果我去http://localhost/api/param1///$_GET['url']應該是param1///但它是param1/

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 
+0

的'-d'&'-f'改寫爲目錄和文件的位置。 'param1 /'可以是一個目錄,'param1 ///'不能是一個目錄。 – Randy

+0

嗯,所以你說這是不可能的?現在我正在使用$ _SERVER [「REQUEST_URI」]變量,它完成這項工作,但我想知道是否有更好的解決方案。 – miXo

+0

雖然你可以在'RewriteCond'指令中使用'REQUEST_URI'變量來解決.htaccess中的問題,PHP中使用'$ _SERVER ['REQUEST_URI']'超全局(如你所做的)可以說是一樣的好更好) - 也許取決於你的情況。 – MrWhite

回答

3

Apache會自動將多個斜線剝去RewriteRule模式中的單斜槓。

如果你想捕捉多個斜線使用RewriteCond代替:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} ^/(.*)$ 
RewriteRule^index.php?url=%1 [QSA,L] 
+1

謝謝,這個工程。然而,它匹配整個URI,而不僅僅是來自.htaccess文件所在子文件夾的URI。但這對我來說是可以接受的。 – miXo

+0

是'%{REQUEST_URI}'匹配完整的URI而不是相對於當前路徑。 – anubhava