首頁  >  問答  >  主體

.htaccess 將最後五個目錄改寫為 GET 值

我有以下網址:

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粉451614834P粉451614834251 天前333

全部回覆(1)我來回復

  • P粉384679266

    P粉3846792662024-01-17 13:06:03

    正規表示式量詞 * 預設是貪婪,因此會消耗盡可能多的內容,然後根據需要回溯。這就是為什麼 $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]

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

    回覆
    0
  • 取消回覆