为了账号安全,请及时绑定邮箱和手机立即绑定

.htaccess 将 REQUEST_METHOD 更改为 GET - 如果 URL

.htaccess 将 REQUEST_METHOD 更改为 GET - 如果 URL

PHP
慕桂英3389331 2023-05-12 16:08:19
我正在构建一个 api,例如。https://example.com/my-api/api.php然后我使用以下 .htaccess 文件使 api 可以通过https://example.com/my-apiRewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule (.*)$ api.php/$1/ [L,QSA]该文件有效,但是当我的 api 调用没有以尾部斜杠结尾或设置了一些参数时,$_SERVER['REQUEST_METHOD'] 变为 GET。例子:POST https://example.com/my-api/foo #becomes GETPOST https://example.com/my-api/foo/ #stays POSTPOST https://example.com/my-api/foo?bar=1 #stays POSTPOST https://example.com/my-api/foo/bar #becomes GETPOST https://example.com/my-api/foo/bar/ #stays POSTPOST https://example.com/my-api/foo/bar?abc=1 #stays POST我怎样才能改变这种行为(这是可取的)还是我应该通知这个 api 的用户总是以尾部斜杠结束他们的调用?添加尾部斜杠后,api 将按预期工作。我主要通过 PostMan 测试了这种行为。
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

这是因为您的 URI 中缺少指向真实目录的斜杠。Apache 的mod_dir模块为这些请求添加尾部斜杠并执行301重定向以产生另一个GET请求。


您可以禁用此行为,但出于安全原因禁用列出目录内容的选项也很重要。


DirectorySlash Off

Options -Indexes


RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule (.*)$ api.php/$1/ [L,QSA]


查看完整回答
反对 回复 2023-05-12
  • 1 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信