我有以下網址:
https://sub.example.com/economy/billing/ payment-check/434/khipu/1000/CLP/1673526088/
我希望將最後 5 個目錄轉換為 GET 值,以反映以下 URL:
https://sub.example.com/economy/billing/ payment-check/?id=434&gateway=khipu&amt=1000&curr=CLP&ts_ttPageLoad=1673526088
我有以下 .htaccess 行:
RewriteEngine on RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/ index.php?id=&gateway=&amt=&curr=&ts_ttPageLoad= [QSA,L]
在 https://htaccess.madewithlove.com/ 上我得到以下重寫結果:
https://sub.example.com/index.php?id=economy/billing/ payment-check/434&gateway=khipu&amt=1000&curr=CLP&ts_ttPageLoad=1673526088
我做錯了什麼?謝謝!
編輯:.htaccess 位於 https://sub.example.com/economy/billing/ payment-check/
正規表示式量詞
*
預設是貪婪,因此會消耗盡可能多的內容,然後根據需要回溯。這就是為什麼$1
包含economy/billing/ payment-check/434
(即盡可能滿足正規表示式)。儘管如此,這是假設.htaccess
檔案位於文檔根目錄中(這是「MWL 測試器」所假設的)。如果您只想匹配單一路徑段,則從捕獲子模式中排除斜杠,例如。
([^/] )
.此外,根據您的規則的性質,我假設此
.htaccess
檔案位於/economy/billing/ payment-check/
子目錄中(而不是根)? 「MWL tester」工具假設.htaccess
檔案位於文檔根目錄中(且無法變更)。事實上,如果.htaccess
檔案位於子目錄中,這將在您的伺服器上“工作”,但是,這並不是最佳選擇,因為考慮到URL 的變化,它仍然可能匹配太多結構。如果
.htaccess
檔案位於/economy/billing/ payment-check/.htaccess
,則使用下列內容:正規表示式
[^/]
符合斜線以外的內容。但是,如果規則位於根
.htaccess
檔案中(MWL 測試人員期望的),則規則需要如下所示:請注意,第一個捕獲子模式現在是 URL 路徑,它在替換字串(第二個參數)中重複。這只是避免了在第二個參數中手動重複 URL 路徑。
您的 URL 似乎需要路徑段中的特定資料類型。例如,第一個、第三個和第五個「參數」看起來只是數字。如果是這種情況,那麼您應該具體並僅匹配數字。同樣,第四個「param」是大寫字母,第二個是小寫字母。因此,具體而言,可以像這樣重寫(使用子目錄中的 .htaccess 檔案):
它只會符合您期望的網址格式。