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/
正则表达式量词
*
默认情况下是贪婪,因此会消耗尽可能多的内容,然后根据需要回溯。这就是为什么$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 文件):
它只会匹配您期望的网址格式。