2011-11-15 142 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