2012-08-27 28 views
3

我有一個奇怪的問題,使用.htaccess RewriteEngine。php .htaccess url重寫不正確的參數

我有這個簡單的規則:

RewriteEngine On 
RewriteRule ^(.\*)/(.\*).php$ pages/test.php?lang1=$1&page1=$2 [L] 

在頁/ test.php的,我把這個PHP代碼:

echo('lang: '.$_GET['lang1'].'< br />');  
echo('page: '.$_GET['page1'].'< br />');  
echo('querystring: '.$_SERVER['QUERY_STRING']); 

因此,呼籲http://test.local/en-US/something.php的時候,我希望是這樣的:

lang: en-US  
page: something  
querystring: lang1=en-US&page1=something 

相反,這是我從頁面中獲得的奇怪輸出:

lang: pages  
page: test  
querystring: lang1=pages&page1=test 

有人可以幫我嗎?

回答

2

你得到的結果,因爲你創造了一個循環,嘗試使用這些行:

RewriteEngine On 
RewriteCond %{REQUEST_URI} !^/pages/test\.php$ 
RewriteRule ^(.*)/(.*)\.php$ /pages/test.php?lang1=$1&page1=$2 [L] 
+0

它就像一個魅力,謝謝你!雖然... – Cuttlefish

+1

您重定向了'^(。*)/(。*)\。php $','pages/test.php'也與該模式相匹配。無論如何,很高興它現在正在工作:) – Oussama

1

您還可以使用QSA標誌:

RewriteRule ^(.*)/(.*).php$ pages/test.php?lang1=$1&page1=$2 [QSA,L] 

當更換URI包含查詢字符串, RewriteRule的默認行爲是放棄現有的查詢字符串,並將其替換爲新生成的查詢字符串。使用[QSA]標誌會導致查詢字符串被合併。

http://httpd.apache.org/docs/current/rewrite/flags.html

+0

謝謝,我試過QSA的標誌,但結果是:lang1 = pages&page1 = test&lang1 = en-US&page1 = dfsdfasdf。我想這是因爲上面的循環問題... – Cuttlefish

+0

我在這裏再現了你的問題,並給出了正確的結果。 L標誌通常會結束任何進一步處理。如果其他答案解決了,也沒關係:) – Maurice