2014-03-25 55 views
2

我試圖建立RewriteEngine敘述所以它會重定向:URL重寫匹配始終是 「的index.php」

http://www.url.com/some/parameter 

http://www.url.com/index.php?page=some&topic=parameter 

或類似的東西。

我的.htaccess文件看起來是這樣的:

Options +FollowSymLinks 
Options +Indexes 
RewriteEngine On 
RewriteRule ^([^/]+)(?:/([^/]+))*/?$ index.php?param1=$1&param2=$2 [L] 

當我訪問http://www.myurl.com/test/param現在它不正確添加的參數(或根本不工作)。 當我打印所有$ _GET條目它總是說:

param1 -> index.php 
param2 -> 

//Code: 
foreach($_GET as $k=>$v) 
    print($k . ' -> ' . $v . '<br/>'); 

我希望任何人有一個想法。

編輯: 我只注意到它的工作原理,如果我把它寫這樣的:http://www.myurl.com/index.php/param1/param2,但我不想在URL的index.php。

回答

1

您需要使用RewriteCond防止這種規則來執行第2次:

Options +FollowSymLinks 
Options +Indexes 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)(?:/([^/]+))*/?$ index.php?param1=$1&param2=$2 [L,QSA] 

在沒有這些2 RewriteCond您的規則正在執行第二次也是因爲模式仍然匹配/index.php URI。

+0

謝謝,它的工作原理。我如何將http://www.myurl.com/重定向到http://www.myurl.com/index.php?page=home? – Adura

+0

不客氣。我建議爲此創建一個新問題,因爲這與當前的問題非常不同,並且由於格式問題而不便提示註釋中的代碼。 – anubhava

+0

我會谷歌,看看我是否找到適合我的東西,如果這沒有幫助,我會創建一個新的問題。 – Adura