2011-02-09 155 views
1

我想使用RewriteRule inorder重定向表單x頁到y頁。 x頁有兩個參數> products.php?product = $ 1 & page = $ 2(myweb.com/products.php?prod ...) y應該是$ 1/$ 2 /(myweb.com/$1/$2/)RewriteRule重定向與url參數

我想這一個>

Options +FollowSymlinks 
RewriteEngine on 
RewriteBase/
RewriteRule ^products.php?product=(.*) $1/ [R=301,L] 

只是用於測試,而像>/$1/代替$1/,一些similiar代碼只$1 我試圖用的RewriteCond與QUERY_STRING但是毫無效果....

ofc,繼續到htaccess >

RewriteRule ^(.*)/$ $1.php [L] 

和一些規則,這是不相關的(我認爲)

你能幫助我嗎?

謝謝。

編輯:

一些大肆搜捕我找到答案了! 這就是答案:

RewriteCond %{QUERY_STRING} ^product=(.*)$ 
RewriteRule ^test.php$ %1/? [R=301,L] 
現在

的解釋: 首先,添加rewritecondition將查詢字符串相匹配。 秒我從重寫規則中刪除查詢字符串,並且$ = continue(查詢字符串)。我還需要添加? (問號)在重寫的第二部分>%1/?問號意味着我不想在新的url中保留查詢字符串。

+0

「 RewriteRule`與PHP無關。你可能想刪除'php'標籤。 – 2011-02-10 02:25:01

+0

已刪除,但我認爲它與php有關,因爲95%的使用php的人也使用htacces(rewriterules)。 – Ron 2011-02-10 04:03:55

回答

3

規則的第一部分應該包含一個正則表達式,服務器可以根據該正則表達式比較請求。例如:

RewriteRule ^([^/]+)/? index.php?page=$1 [L] 

,將採取http://somedomain.fake/somepage/,重定向到http://somedomain.fake/index.php?page=somepage。規則的第一部分匹配,第二部分處理。我的規則在那裏,「([^ /] +)」是正則表達式,可以匹配任何東西。如果要縮小規則的工作方式,可以自定義正則表達式以包含或排除某些字符串部分。

我建議您考慮在規則上面添加以下條件。它們確保如果與規則匹配的文件或目錄確實存在,則服務器不會覆蓋具有重寫的實際文件。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

.htaccess和mod_rewrite是voodoo,使用舊報價。確保在實況網站上實施這種事情之前徹底研究。

---------------------編輯:

後討論更新:

RewriteEngine On 
RewriteCond %{QUERY_STRING} ^product=([^/]+)$ 
RewriteRule ^products\.php$ %1.php [L] 

OR

RewriteEngine On 
RewriteCond %{QUERY_STRING} ^product=([^/]+)$ 
RewriteRule ^products\.php$ %1/ [L]