我正试图在.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 中匹配问号