使用.htaccess无法正常删除尾部斜杠

时间:2014-01-26 18:31:39

标签: php .htaccess mod-rewrite

我的文件结构是:

/test/
    myfile.php
    .htaccess

.htaccess文件中的代码是:

RewriteEngine On
RewriteBase /test/

RewriteRule (.*)/ $1 [QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) myfile.php?q=$1  [QSA]

myfile.php内,代码是:

<?php
     var_dump($_GET['q']);
?>

因此,当我浏览http://127.0.1.1/test/aaa/bbb/ccc时,我会在浏览器中获得此输出:

string(15) "aaa/bbb/bbb/ccc",这是完美的。

但是当我试图浏览http://127.0.1.1/test/aaa/bbb/ccc/时,我得到了这个不期望的输出:

string(20) "aaa/bbb/ccc/bbb/ccc/"

任何人都可以解释为什么会这样吗?我也在网络服务器上对此进行了测试。

1 个答案:

答案 0 :(得分:1)

*运算符的默认行为是贪婪(它将匹配尽可能多的字符,其中包括任何尾部斜杠)。尝试添加?修饰符以切换到非贪婪模式:

RewriteRule (.*?)/ $1 [QSA]