.htaccess 如何正确重写此URL?

.htaccess 如何正确重写此URL?,.htaccess,rest,mod-rewrite,url-rewriting,.htaccess,Rest,Mod Rewrite,Url Rewriting,我正在向我的应用程序添加RESTAPI。REST API位于我的应用程序的/API。我希望正确路由所有请求,包括具有参数的请求。我有以下htaccess规则,这些规则大部分都有效: <IfModule mod_rewrite.c> Options +FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(

我正在向我的应用程序添加RESTAPI。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>

您需要使用查询字符串Append标志,如下所示:

RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
根据:

当替换URI包含查询字符串时,默认行为 重写规则的作用是丢弃现有的查询字符串,并替换它 使用新生成的一个。使用[QSA]标志会导致查询 要组合的字符串

考虑以下规则:

RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]
使用
[QSA]
标志,对
/pages/123?one=two的请求将映射到
/page.php?page=123&one=two
。如果没有
[QSA]
标志,相同的请求 将映射到
/page.php?page=123
——即现有查询 字符串将被丢弃


如果您正在执行友好的URL,并且正在捕获整个URI,这就是它的外观,那么只需将其添加到末尾,而不是执行查询字符串<代码>/api/projects/get/1
在代码中,您知道1的最后一个路径是类型(如果存在)。在IMO中,你应该只使用一种方法,不要使它过于复杂。谢谢,QSA标志是这里的关键。
RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]