访问目录时,mod_rewrite不起作用

时间:2012-09-28 15:52:34

标签: php apache mod-rewrite url-rewriting

我正在使用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时(没有拖尾/),
地址栏中的网址变为http://example.com/xyz/b/?first-dir=aa 我不想向用户显示这个重写的URL。

为什么会发生这种情况? 如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如果带有/ index.php的网址将会执行

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