Htaccess重写删除尾部斜杠
问题描述:
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]
答
Apache会自动将多个斜线剥去RewriteRule
模式中的单斜杠。
如果你想捕捉多个斜线使用RewriteCond
代替:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/(.*)$
RewriteRule^index.php?url=%1 [QSA,L]
的'-d'&'-f'改写为目录和文件的位置。 'param1 /'可以是一个目录,'param1 ///'不能是一个目录。 – Randy
嗯,所以你说这是不可能的?现在我正在使用$ _SERVER [“REQUEST_URI”]变量,它完成这项工作,但我想知道是否有更好的解决方案。 – miXo
虽然你可以在'RewriteCond'指令中使用'REQUEST_URI'变量来解决.htaccess中的问题,PHP中使用'$ _SERVER ['REQUEST_URI']'超全局(如你所做的)可以说是一样的好更好) - 也许取决于你的情况。 – MrWhite