Mod用额外的查询字符串重写伪目录路径


Mod Rewrite faux-directory path with extra query string

我正试图在.htaccess文件中编写一个重写规则,该规则具有以下行为。我为API做这件事,它以的形式位于一个真实的位置

https://www.domain.com/apifolder/entry.php?call=testcall&data=testdata

API调用从entry.php开始路由,并最终提供适当的响应。从本质上讲,我的整个API都依赖于有效API调用的大型开关语句。问题是,这个URL不是很好。我正在尝试用以下形式的URL替换它:

https://www.domain.com/api/testcall?data=testdata

我已经接近以下重写规则:

RewriteRule ^api/([^/]+)/? /apifolder/entry.php?call=$1 [L]

然而,上面想要的例子不起作用,因为第一个参数(数据,实际上是第二个参数)似乎是由引导的。如果我尝试网址:

https://www.domain.com/api/testcall&data=testdata

&,则它工作得非常好。遗憾的是,这在我看来也很奇怪。我能做些什么让重写后的URL接收以开头的查询字符串吗

我通过在规则中包含[QSA]标志来解决这个问题,该标志将查询字符串(以其所需的格式)传递到真实的URL:

RewriteRule ^api/([^/]+)/? /apifolder/entry.php?call=$1 [QSA,L]

我在看到StackOverflow的答案后尝试了一下:在mod_rewrite规则regex 中匹配问号