0

我正在使用 php 开发一个网站。
我想使用 URL 的第一个目录名称作为 php 的参数。

我有以下重写规则:

RewriteRule ^([a-z][a-z])/(.*)$ xyz/$2?first-dir=$1 [L]

当我访问http://example.com/aa/b/时,
/xyz/b/index.php使用参数执行first-dir=aa
并且浏览器地址栏中的 URL 是http://example.com/aa/b/(与输入 URL 相同)。

但是当我访问http://example.com/aa/b(不拖尾/)时,
地址栏中的 URL 变为http://example.com/xyz/b/?first-dir=aa.
我不想向用户显示这个重写的 URL。

为什么会这样?
如何解决这个问题?

4

2 回答 2

1

这是 mod_dir 并DirectorySlash干扰您的 URI。当 Apache 发现您的 URI 指向一个目录但缺少尾部斜杠时,它将 301 将客户端重定向到带有尾部斜杠的相同 URI。正在应用您的规则, mod_dir 看到这/aa/b是一个目录,因此它将浏览器重定向到/aa/b/. 您只需要检查规则中的尾部斜杠:

RewriteRule ^([a-z][a-z])/(.*?)/?$ xyz/$2/?first-dir=$1 [L]
于 2012-09-29T18:19:46.173 回答
0

如果带有 / 的 URLindex.php将被执行

修复的错误: RewriteRule ^([a-z][a-z])/(.*)$ xyz/$2/index.php?first-dir=$1 [L]

于 2012-09-28T16:31:33.470 回答