Heim  >  Fragen und Antworten  >  Hauptteil

.htaccess schreibt die letzten fünf Verzeichnisse als GET-Werte um

Ich habe die folgende URL:

https://sub.example.com/economy/billing/ payment-check/434/khipu/1000/CLP/1673526088/

Ich möchte die letzten 5 Verzeichnisse in GET-Werte umwandeln, um die folgende URL wiederzugeben:

https://sub.example.com/economy/billing/ payment-check/?id=434&gateway=khipu&amt=1000&curr=CLP&ts_ttPageLoad=1673526088

Ich habe die folgenden .htaccess-Zeilen:

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

Auf https://htaccess.madewithlove.com/ erhalte ich die folgenden Umschreibeergebnisse:

https://sub.example.com/index.php?id=economy/billing/ payment-check/434&gateway=khipu&amt=1000&curr=CLP&ts_ttPageLoad=1673526088

Was habe ich falsch gemacht? Danke!

Bearbeiten: .htaccess unter https://sub.example.com/economy/billing/ payment-check/

P粉451614834P粉451614834251 Tage vor332

Antworte allen(1)Ich werde antworten

  • 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=$1&gateway=$2&amt=$3&curr=$4&ts_ttPageLoad=$5 [QSA,L]

    正则表达式 [^/]+ 匹配除斜杠之外的内容。

    但是,如果规则位于根 .htaccess 文件中(MWL 测试人员期望的),则规则需要如下所示:

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

    请注意,第一个捕获子模式现在是 URL 路径,它在替换字符串(第二个参数)中重复。这只是避免了在第二个参数中手动重复 URL 路径。

    您的 URL 似乎需要路径段中的特定数据类型。例如,第一个、第三个和第五个“参数”看起来只是数字。如果是这种情况,那么您应该具体并仅匹配数字。同样,第四个“param”是大写字母,第二个是小写字母。因此,具体而言,可以像这样重写(使用子目录中的 .htaccess 文件):

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

    它只会匹配您期望的网址格式

    Antwort
    0
  • StornierenAntwort