2011-10-19 51 views
3

如果QUERY_STRING匹配使用該規則的內容,我該如何做?按查詢字符串使用重寫規則

Options +FollowSymlinks -MultiViews 
RewriteEngine On 
RewriteBase/

RewriteRule ^(.*)/?$ index.php?uri=$1 [L,QSA] 

RewriteCond %{QUERY_STRING} uri=admin 
ReqriteRule ^admin\?(.*)/?$ index.php?uri=admin&q=$1 [L,QSA] 

例如, http://localhost/admin?poll/new?後應該是paramater q,該查詢將uri=admin&q=poll/new

我如何能做到這一點任何想法?

謝謝。

+1

剛纔已經回答同樣的問題在這裏http://stackoverflow.com/questions/7703552/rewriting-dynamic-urls/7774701#7774701看看它應該足夠 – regilero

+0

但我該如何將'uri = admin&q = poll/new'改寫爲'admin?poll/new'?很長一段時間,因爲我使用mod重寫,所以我不明白你的帖子。 – NoobiCake

回答

1

嗯,碰巧你的問題比我給你的鏈接更簡單,因爲你不想對查詢字符串內容進行任何分析。

如果使用此單行:

RewriteRule ^admin index.php?uri=admin&q= [L,QSA] 

凡QSA意味着追加查詢字符串的結果。您將獲得一個內部重定向到:

index.php?uri=admin&q=&poll/new 

這也不行,這是因爲你使用的參數(admin?poll/new)的方式不是標準的方式。所以我們似乎需要捕獲查詢字符串內容並將其手動放置在rewriteRule上。這應該工作(如果你需要它僅適用於/管理URL):

RewriteCond %{REQUEST_FILENAME} admin [NC] 
RewriteCond %{QUERY_STRING} (.*) [NC] 
RewriteRule .* index.php?uri=admin&q=%1 [L] 

%1中的的RewriteCond第一個括號匹配:(.*),在查詢字符串意味着一切,之後的查詢字符串是任何東西問號。所以其實這使得admin?poll/newadmin?poll/new&foo=toto,使index.php?uri=admin&q=poll/new&foo=bar