2012-07-26 65 views
2

我想從/畫廊/ X到gallery.php?重定向類別= X

但是當我真正轉到這個地址,我的老$ _ GET變量「類」轉化成形式:

$_GET['category'] = "X.php/X" 

這是我的.htaccess的樣子:

RewriteBase/

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^gallery/(.*)$ /gallery.php?category=$1 [L] 

我在正則表達式非常糟糕,沒有幾乎一無所知的.htaccess。我一直在嘗試使用這個重寫規則來保存$ _GET變量,但是我似乎沒有任何工作。我應該在這裏做什麼?

謝謝!

回答

3

左右移動你的規則:

RewriteEngine on 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^gallery/(.*)$ /gallery.php?category=$1 [L] 

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

此外,添加QSA到你的動作,[L,QSA]。這會在重定向期間附加查詢字符串,所以它應該保留您以前的數據。

說明:

你重寫需要在一個特定的順序,因爲[L]選項類似於向服務器一個完全新的請求。因此,當您要求gallery/X進來時,它將您的請求重寫爲/gallery.php?category=X。當該頁面被服務器請求時,它與您的第一條規則相匹配,這意味着它被視爲X.php/X,然後將其作爲額外的$1返回原始請求。

聽起來令人困惑,但我認爲這是怎麼回事。

+0

謝謝,這工作!我仍然困惑如何改變順序和添加QSA做到這一點,你介意解釋發生了什麼請求,所以我可以理解htaccess更好一點? – OneThreeSeven 2012-07-26 03:05:20

+0

添加了解釋。我認爲這就是發生的事情。很高興工作! – 2012-07-26 03:41:27