.htaccess 將最後五個目錄改寫為 GET 值
P粉451614834
P粉451614834 2024-01-17 00:29:03
0
1
385

我有以下網址:

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/

P粉451614834
P粉451614834

全部回覆(1)
P粉384679266

正規表示式量詞 * 預設是貪婪,因此會消耗盡可能多的內容,然後根據需要回溯。這就是為什麼 $1 包含 economy/billing/ payment-check/434 (即盡可能滿足正規表示式)。儘管如此,這是假設 .htaccess 檔案位於文檔根目錄中(這是「MWL 測試器」所假設的)。

如果您只想匹配單一路徑段,則從捕獲子模式中排除斜杠,例如。 ([^/] ).

此外,根據您的規則的性質,我假設此 .htaccess 檔案位於 /economy/billing/ payment-check/ 子目錄中(而不是根)? 「MWL tester」工具假設 .htaccess 檔案位於文檔根目錄中(且無法變更)。事實上,如果.htaccess 檔案位於子目錄中,這將在您的伺服器上“工作”,但是,這並不是最佳選擇,因為考慮到URL 的變化,它仍然可能匹配太多結構。

如果 .htaccess 檔案位於 /economy/billing/ payment-check/.htaccess,則使用下列內容:

RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ index.php?id=&gateway=&amt=&curr=&ts_ttPageLoad= [QSA,L]

正規表示式 [^/] 符合斜線以外的內容。

但是,如果規則位於根 .htaccess 檔案中(MWL 測試人員期望的),則規則需要如下所示:

RewriteRule ^(economy/billing/payment-check)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ /index.php?id=&gateway=&amt=&curr=&ts_ttPageLoad= [QSA,L]

請注意,第一個捕獲子模式現在是 URL 路徑,它在替換字串(第二個參數)中重複。這只是避免了在第二個參數中手動重複 URL 路徑。

您的 URL 似乎需要路徑段中的特定資料類型。例如,第一個、第三個和第五個「參數」看起來只是數字。如果是這種情況,那麼您應該具體並僅匹配數字。同樣,第四個「param」是大寫字母,第二個是小寫字母。因此,具體而言,可以像這樣重寫(使用子目錄中的 .htaccess 檔案):

RewriteRule ^(\d+)/([a-z]+)/(\d+)/([A-Z]+)/(\d+)/$ index.php?id=&gateway=&amt=&curr=&ts_ttPageLoad= [QSA,L]

它只會符合您期望的網址格式

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!