我目前正在使用一個自寫的路由器開發一個API。它使用一個.htaccess檔案來重定向所有進入的請求到index.php檔案。
我發現了以下問題:如果有一個傳入的請求,例如。OPTIONS https://<domain>/auth 而目錄auth/存在于根層,那么請求方法就會被切換為GET。
.htaccess檔案:
RewriteEngine On
RewriteCond %{HTTP:Authorization}. ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1] 。
RewriteCond %{REQUEST_FILENAME}。 -f [OR]
RewriteCond %{REQUEST_FILENAME}! !-f
RewriteRule ^(.*)$ index.php [L,QSA] 。
我怎樣才能解決這個問題?謝謝。
uj5u.com熱心網友回復:
這是因為mod_dir發出301重定向,將尾部斜線附加到目錄上(以 "修復 "URL)。301重定向的一個后果是,用戶代理(瀏覽器)將隨后的請求方法改為GET。
如果你特別想允許這些型別的請求,那么你需要阻止mod_dir用DirectorySlash Off追加斜線。然而,你還需要確保禁用mod_autoindex(自動生成目錄串列)(以防止意外泄露資訊),如果你需要直接訪問其他地方的目錄,你有可能遇到問題。
例如,在你的.htaccess檔案的頂部:
# 禁用目錄串列(mod_autoindex)
選項 -索引
# 防止mod_dir在目錄中添加斜線
關閉DirectorySlash
參考資料:
Aside:
RewriteCond %{REQUEST_FILENAME}。 -f [OR]
RewriteCond %{REQUEST_FILENAME}! !-f
RewriteRule ^(.*)$ index.php [L,QSA] 。
這些RewriteCond指令是多余的。你正在重寫字面上的一切到index.php。寫成這樣會更有效:
RewriteRule !^index.php$ index.php [L] 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/309772.html
標籤:
