2016-07-25 203 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