次の URL があります:
https://sub.example.com/economy/billing/payment-check/434/khipu/1000/CLP/1673526088/
次の URL を反映するために、最後の 5 つのディレクトリを GET 値に変換したいと考えています:
https://sub.example.com/economy/billing/payment-check/?id=434&gateway=khipu&amt=1000&curr=CLP&ts_ttPageLoad=1673526088
次の .htaccess 行があります:
リーリー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
私は何を間違えたのでしょうか?ありがとう!
編集: https://sub.example.com/economy/billing/payment-check/
にある .htaccess
正規表現数量子
*
デフォルトは greedy であるため、可能な限り消費し、必要に応じてバックトラックします。そのため、$1
にはeconomy/billing/payment-check/434
が含まれています (つまり、正規表現を可能な限り満たします)。ただし、これは、.htaccess
ファイルがドキュメント ルートにあることを前提としています (これは、「MWL テスター」が想定していることです)。単一のパス セグメントのみを一致させたい場合は、キャプチャするサブパターンからスラッシュを除外します。
([^/] )
.また、ルールの性質に基づいて、この
.htaccess
ファイルは/economy/billing/payment-check/
サブディレクトリ (根)? 「MWL テスター」ツールは、.htaccess
ファイルがドキュメント ルートにある (変更できない) ことを前提としています。実際、.htaccess
ファイルがサブディレクトリにある場合、これはサーバー上で「機能」しますが、URL の変更を考慮すると一致しすぎる可能性があるため、これは最適ではありません。
リーリー.htaccess
ファイルが/economy/billing/payment-check/.htaccess
にある場合は、次を使用します。正規表現
[^/]
スラッシュを除くコンテンツと一致します。ただし、ルールがルート
リーリー.htaccess
ファイル内にある場合 (MWL テスターの予想通り)、ルールは次のようにする必要があります:最初にキャプチャされたサブパターンが URL パスになり、これが replacement 文字列 (2 番目の引数) で繰り返されることに注意してください。これは、2 番目のパラメータで URL パスを手動で繰り返すことを避けるだけです。
URL では、パス セグメントに特定のデータ型が必要のようです。たとえば、1 番目、3 番目、5 番目の「引数」は単なる数字のように見えます。この場合は、具体的に数字のみを一致させる必要があります。同様に、4 番目の「param」は大文字、2 番目は小文字です。具体的には、次のように書き換えることができます (サブディレクトリ内の .htaccess ファイルを使用):
リーリーこれは、期待する URL format にのみ一致します。