簡體   English   中英

.htaccess 將 REQUEST_METHOD 更改為 GET - 如果 URL 沒有參數或尾部斜杠

[英].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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM