我是mod_rewrite的新手,我遇到了这个问题:
我有一个使用mod_rewrite的工作重定向,我的.htaccess:
RewriteEngine on
RewriteRule ^microsite/([^/\.]+)/$ micrositecontroller.php?name=$1 [L]
micrositecontroller.php只回显文本
在我输入网址时在浏览器上:
本地主机/项目/微型/测试/
我被重定向到想要的地方,但是当我进入时:
本地主机/项目/微型/测试
它仍然会重定向到想要的位置,但URL会变成这样:
本地主机/项目/微型/测试/?名称=测试
现在我想要的是跟踪“/?name = test”不显示。
我尝试了正则表达式的不同组合,但无济于事,我不知道它是否正常。有什么想法吗?
答案 0 :(得分:0)
你的正则表达式中有一个斜杠,所以你的正则表达式处理斜杠...只需删除它:
RewriteEngine on
RewriteRule ^microsite/([^/\.]+)$ micrositecontroller.php?name=$1 [L]
答案 1 :(得分:0)
你想要的是:
RewriteEngine on
RewriteRule ^microsite/([^/\.]+)/?$ micrositecontroller.php?name=$1 [L]
# Note the "?"-------------------^
以两个斜杠结尾并且没有斜杠。将斜杠保持打开(或关闭)的问题是apache强制浏览器重定向,从而使?name=test
显示在浏览器的位置栏中。
这是因为mod_dir和DirectorySlash on
指令存在干扰。 DirectorySlash指令告诉apache在访问看起来像目录的东西时重定向浏览器(在你的情况下是localhost/project/microsite/test
到smae URI,除了有一个斜杠。