2014-07-09 39 views
1

我想將完整的網址(包括QUERY_STRING)重寫爲index.php?url=[url]&query=[query]。以下規則適用於: RewriteRule ^(.*)$ index.php?url=$1&query=%{QUERY_STRING} [B]B標誌確保編碼爲$1部分,但不編碼%{QUERY_STRING}。我怎樣才能編碼呢?.htaccess encode%{QUERY_STRING}

實施例:

http://www.website.com/test&test.php?arg1=val1&arg2=val2重寫到Array('url' => 'test&test.php','query' => 'arg1=val1', 'arg2' => 'val2'),其中Array('url' => 'test&test.php','query' => 'arg1=val1&arg2=val2')預計。

+0

爲什麼不從PHP獲取'query string'並使用[parse_str](http://php.net/manual/en/function.parse-str.php)創建數組? – machineaddict

回答

1

首先,你可以離開現有的查詢字符串不變通過QSA標誌:

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

作爲第二個想法,你所帶來的查詢字符串到規則的第一步,然後捕獲它通過B標誌來引起正確的編碼。我沒有測試過,所以嘗試這兩個選項::

選項1個

RewriteCond %{QUERY_STRING} (.*) 
RewriteRule ^(.*) index.php?url=$1&query=%1 [B,L] 

選項2

RewriteCond %{QUERY_STRING} (.*) 
RewriteRule ^(?!index)(.*) %1URL$1 [B] 
RewriteRule ^(.*?)URL(.*) index.php?url=$1&query=$2 [B,L] 
0

您可以使用此:

RewriteCond %{QUERY_STRING} .* 
RewriteRule .+ index.php?url=$0&query=%0 [B,L] 

我用。+規則中避免由mod_dir(DirectorySlash和DirectoryIndex)造成的雙重重寫