我正在使用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。
为什么会发生这种情况? 如何解决这个问题?
答案 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]