logo头像

博学广问,自律静思

解决htacess RewriteRule中含有?的问题

最近分别用PHP和java写个一个IP寻找地理位置的在线API,由于想让自己的URL看起来更加漂亮,便使用了htaccess Rewrite语法对URL进行了重写,其中出现无法匹配“?”的情况,最后解决了,在此给大家分享一下: 我想实现的效果是把

api.php?format=js&ip=10.22.56.0 重写为 api.js?ip=10.22.56.0

api.php?format=json&ip=10.22.56.0 重写为 api.json?ip=10.22.56.0

于是很容易写了下面规则:

RewriteRule api\.(txt|html|json|js)\?(.*)$ api.php?format=$1&$2 [L]

然后始终无法实现相关效果,初步原因是rewrite不能把带问号的QUERY_STRING进行匹配,最后使用下面的规则成功了:

RewriteRule api\.(txt|html|json|js)(.*)$ api.php?format=$1&%{QUERY_STRING} [L]

%{变量名}可以获取请求的参数