.htaccess mod_rewrite将“/”添加到url的末尾

时间:2011-05-11 10:44:48

标签: .htaccess mod-rewrite

这是我的.htaccess代码:

RewriteBase /kajak/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^moduli/([^/]+)/(.*)$ moduli/$1/index.php/$2 [L]

现在/会附加到每个网址。例如,http://127.0.0.1/moduli/novice变为http://127.0.0.1/moduli/novice/

如何防止最终获得/

2 个答案:

答案 0 :(得分:1)

虽然我不知道您问题的答案,但我会注意到您的问题和代码可能与手头的问题有关的两个奇怪之处。

  1. 使用代码中的RewriteBase,甚至不应触发这些规则。

  2. 虽然我自己是正则表达式的新手,但我会看([^ /] +),并且为什么要抓住它有点困惑。我知道^匹配字符串的START,这永远不会是真的,因为你已经在字符串的真正开头有另一个。

  3. 话虽如此,我可能会编写如下代码:

    RewriteBase /moduli/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/(.*)$ $1/index.php/$2 [L]
    

    这将重写URL如下:

    http://www.website.com/moduli/novice/view
    http://www.website.com/moduli/novice/index.php/view
    

    根据您的代码块,这似乎是您要做的。如果不是,那我很抱歉。

答案 1 :(得分:1)

我认为这与您的重写规则无关(它与之匹配)。

添加/是因为当您请求http://example.com/xx/zz并且Web服务器检测到zz是目录时,它会通过301重定向将其转换为http://example.com/xx/zz/(浏览器发出另一个请求 - 检查你的apache日志)。

了解尾随斜杠重定向事物here

你必须问自己,当你请求的网址是http://127.0.0.1/moduli/novice/时你想要发生什么?(你想让它被你的重定向捕获吗?目前它没有因为{{1 }})

顺便说一句,我不太明白你的RewriteCond %{REQUEST_FILENAME} !-d行 - 你确定它是正确的吗?