[英].htaccess changes REQUEST_METHOD to GET - if the URL does not have params or a trailing slash
我正在構建一個 api 例如。 https://example.com/my-api/api.php
然后我使用以下 .htaccess 文件通過https://example.com/my-api
使 api 可用
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*)$ api.php/$1/ [L,QSA]
該文件有效,但是當我的 api 調用沒有以斜杠結尾或設置了一些參數時,$_SERVER['REQUEST_METHOD'] 變為 GET。
例子:
POST https://example.com/my-api/foo #becomes GET
POST https://example.com/my-api/foo/ #stays POST
POST https://example.com/my-api/foo?bar=1 #stays POST
POST https://example.com/my-api/foo/bar #becomes GET
POST https://example.com/my-api/foo/bar/ #stays POST
POST https://example.com/my-api/foo/bar?abc=1 #stays POST
我怎樣才能改變這種行為(這是可取的)還是我應該通知這個 api 的用戶總是以斜杠結束他們的通話? 添加尾部斜杠后,api 按預期工作。
我主要通過 PostMan 測試了這種行為。
發生這種情況是因為您的 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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.