Dot-Htaccess
apache2路徑重寫以獲取參數 - 使斜杠工作
以下是我目前的
.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]