重写URL但显示原始URL

时间:2014-07-16 01:31:58

标签: .htaccess mod-rewrite rewrite

我正在尝试将mysite/index.php?con=aaa&act=bbb&id=123重写为`mysite / aaa / bbb / 123'

这在我的网站中完美运行,但我有一个名为manager的目录,我想在该目录中使用相同的规则。所以我用这段代码重写了URL:

Options +FollowSymLinks
Options -Indexes

RewriteEngine on

RewriteRule ^manager/([a-zA-Z]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?$ manager/index.php?con=$1&act=$2&id=$3 [NC,QSA,L]
RewriteRule ^([a-zA-Z]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?$ index.php?con=$1&act=$2&id=$3 [NC,QSA,L]

当我尝试访问

mysite/manager

我的地址栏显示

mysite/manager/?con=manager&act=&id=

我不知道为什么将manager视为查询。

任何人都可以帮我修复此规则吗?

1 个答案:

答案 0 :(得分:0)

您被重定向的原因是因为mod_dir会将对不以尾部斜杠结尾的目录的任何请求重定向到带有斜杠的同一URL。您可以通过关闭DirectorySlash来关闭此功能,但这会使您的网站容易受到信息泄露的影响,即使您有索引文件,任何人都可以看到您目录中的所有内容。

最好只使用尾部斜杠访问目录或关闭DirectorySlash并使用mod_rewrite处理它:

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*[^/])$ /$1/ [L,R=301]

RewriteEngine On行的正下方添加。