2011-11-15 141 views
0

我是新来mod_rewrite的,我有这样的问题:重写规则,URL错误地显示

我有mod_rewrite的工作重定向,我的.htaccess:

RewriteEngine on 
RewriteRule ^microsite/([^/\.]+)/$ micrositecontroller.php?name=$1 [L] 

micrositecontroller.php只有呼应文本

在浏览器上,当我输入网址:

本地主机/项目/微型/测试/

我重定向到想要的,但是当我进入:

本地主机/项目/微型/测试

它仍然重定向到哪里想,但URL变成这样:

本地主机/项目/微型/测试/?的名字=测试

现在我想要的是尾随“/?name = test”不显示。

我试过不同的正则表达式组合,但无济于事,我不知道它是否正常。任何想法?

回答

0

你在你的正则表达式斜线,所以你的正则表达式手柄削减...只是将其删除:

RewriteEngine on 
RewriteRule ^microsite/([^/\.]+)$ micrositecontroller.php?name=$1 [L] 
+0

我做过这样做,做它不重定向我想要的地方当我使用:localhost/project/microsite/test – Rishi

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除了一个尾部的斜线。

+0

时仍然出现尾随的“/?name = test”,但仍然没有工作:(复制粘贴) RewriteEngine on RewriteRule^microsite /([^/。] +)/?$ micrositecontroller.php?name = $ 1 [L] 它应该在哪里,但“?name = test”仍然显示 – Rishi

+0

文档根目录中是否存在'/ microsite/test'目录? –

+0

www doc根文件结构: 项目> microsite> test> index.php, 项目> .htaccess, 项目> micrositecontroller.php 这些是目前和正在使用的主要项目。 – Rishi