.htaccess编码%{QUERY_STRING}

时间:2014-07-09 06:22:10

标签: php apache .htaccess mod-rewrite

我想将完整的网址(包括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')

2 个答案:

答案 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)引起的双重写