我想将完整的网址(包括QUERY_STRING)重写为index.php?url=[url]&query=[query]
。以下规则适用于此:
RewriteRule ^(.*)$ index.php?url=$1&query=%{QUERY_STRING} [B]
。 B
标志可确保$1
部分的编码,但不会对%{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 :(得分: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]
答案 1 :(得分:0)
您可以使用:
RewriteCond %{QUERY_STRING} .*
RewriteRule .+ index.php?url=$0&query=%0 [B,L]
我在规则中使用。+以避免由mod_dir(DirectorySlash和DirectoryIndex)引起的双重写