Dot-Htaccess

apache2路徑重寫以獲取參數 - 使斜杠工作

  • October 14, 2019

以下是我目前的.htaccess文件。如果我打開https://example.com/test並且它沒有以第 2 行中指定的結尾之一結束,它將打開https://example.com/index.php?url=test

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !\.(css|js|png|jpg|php|svg|gif|webm|webp|eot|ttf|woff|woff2)
RewriteRule ^([^/]+)/? index.php?url=$1 [L,QSA]

但是,如果我嘗試打開https://example.com/something/test,它只會打開?url=something而不是?url=something/test. 我怎樣才能做到這一點?我對正則表達式的東西一無所知

正則表達式^([^/]+)/?僅擷取第一個路徑段,即。[^/]+匹配 1 個或多個非斜線字元。如果您希望匹配整個 URL 路徑,請使用(.+)(匹配 1 個或多個任意字元)。但是,如果您只想匹配 1 或 2 個路徑段,您可以更加嚴格嗎?

並且它不以第 2 行中指定的結尾之一結尾

該條件不會專門檢查URL是否以這些擴展之一“結束”,它會檢查這些擴展之一是否包含在 URL 映射到的文件系統路徑中。您需要在正則表達式的末尾有一個字元串結尾的錨$。要專門檢查 URL,您應該檢查REQUEST_URI伺服器變數。

所以,這就變成了:

RewriteEngine on
RewriteCond %{REQUEST_URI} !\.(css|js|png|jpg|php|svg|gif|webm|webp|eot|ttf|woff|woff2)$
RewriteRule (.+) index.php?url=$1 [L,QSA]

引用自:https://serverfault.com/questions/987791