我試圖將虛擬主機的請求標頭限制為僅POST
,HEAD
和GET
。到目前為止,我所做的是.htaccess
為我的虛擬主機建立一個並輸入以下內容:
<LimitExcept GET HEAD POST>
Require valid-user
</LimitExcept>
問題是<LimitExcept>
顯示一個錯誤,顯示not allowed here
,所以我嘗試使用,<Limit>
但結果是相同的錯誤。我還嘗試將它們移動到我的虛擬主機.conf
文件中,但仍然是錯誤。我不明白的是,在官方文件中它說它允許在那裡,但在我的伺服器中卻不允許。
答案1
如果您嘗試僅允許 GET、POST 和 HEAD 方法,那麼這應該可以正常工作:
<Directory "/path/to/documentroot">
Require method GET POST HEAD
</Directory>
您需要將此配置放入您的 VirtualHost 中。
編輯: 若要回答評論中的其他問題(如何僅對 POST 請求啟用密碼驗證),可以透過以下指令來實現(您可以將其放入 /path/to/your/directory/.htaccess 中):
<RequireAny>
AuthUserFile /path/to/your/.htpasswd
AuthName "Login"
AuthType Basic
Require method GET HEAD
Require valid-user
</RequireAny>
這將允許 GET 和 HEAD 方法,但 POST 請求會觸發身份驗證。
答案2
2.4 有一個專門的模組用於此目的,稱為 mod_allowmethods,並且在 2.4 中不鼓勵使用 Limit/LimitExcept。確保加載模組並在適當的虛擬主機中添加以下內容:
# documentroot dir in virtualhost
<Directory /path/to/dir>
AllowMethods GET HEAD POST
Require valid-user
</Directory>
您還可以在伺服器配置中將其全域定義為所有內容,就像我在下面描述的那樣。
***注意,這是/ 在您的檔案系統中,因此您應該拒絕此處的訪問,並允許在特定目錄(例如documentroot 或別名目錄)中訪問,但允許方法會進一步向下傳播,除非您稍後覆蓋它。
<Directory />
Require all denied
AllowMethods GET HEAD POST
</Directory>