我正在为我的应用程序添加REST API。 REST API位于我的应用程序的/ api。我想正确地路由所有请求,包括具有参数的请求。我有以下htaccess规则,它们大部分都在起作用:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L]
</IfModule>
使用这些规则,我现在可以去: mysite.com/api/projects/get它会正确地给我回JSON数据,好像我会以常规方式访问它mysite.com?url=api/projects/get
当我尝试向请求添加参数时,我的问题就开始了。 我的应用程序已经处理了参数。因此,如果我要去:mysite.com/api/projects&type=1,它将返回类型1的项目。但是,我认为URL看起来更像是:mysite.com/ api / projects?type = 1(注意?而不是&amp;)
我如何修改我的htaccess规则来处理这个问题?
我正在尝试以下但没有运气:
RewriteRule ^(.*)/?(.*)$ index.php?url=$1&$2 [L]
答案 0 :(得分:2)
您需要使用Query String Append标志,如下所示:
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
当替换URI包含查询字符串时,默认行为 RewriteRule是丢弃现有的查询字符串,并替换它 与新生成的一个。使用[QSA]标志会导致查询 要组合的字符串。
考虑以下规则:
RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]
使用
[QSA]
标记,将/pages/123?one=two
的请求映射到/page.php?page=123&one=two
。没有[QSA]
标志,同一个请求 将映射到/page.php?page=123
- 即现有查询 字符串将被丢弃。