所以我正在制作一种代理类型的东西,我需要使用我的.htaccess文件对所有的get查询进行编码。基本上我想默默地重定向:
http://example.com/p/external.php?foo=bar
为:
http://example.com/proxy.php?path=external.php%3Ffoo=bar
除了以下代码行似乎不是这样:
RewriteRule ^p/(.*)$ /proxy.php?path=$1
我已经尝试过使用B标志和NE标志,但似乎两者之间没有任何差异,之前是什么?被传递但没有别的。
答案 0 :(得分:1)
将通用规则与B
标志一起使用
RewriteCond %{THE_REQUEST} \s/+p/[^?]+\?([^\s]+) [NC]
RewriteRule ^p/(.+?)\.php$ /proxy.php?path=$1.php\%3F%1 [L,NC,B]
这将使用
将/p/external.php?foo=bar&abc=123
重写为/proxy.php
_SERVER["QUERY_STRING"]=path=external.php%3Ffoo%3dbar%26abc%3d123
答案 1 :(得分:0)
您需要包含%{QUERY_STRING}
变量:
RewriteCond %{QUERY_STRING} ^(.*)&(.*)$
RewriteRule ^p/ %{REQUEST_URI}?%1\%26%2[L,NE]
RewriteRule ^p/(.*)$ /proxy.php?path=$1\%3F%{QUERY_STRING}
因为它不是规则模式匹配的一部分,并且不会被(.*)
捕获。