我有以下网址:
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=$1&gateway=$2&amt=$3&curr=$4&ts_ttPageLoad=$5 [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/中
1条答案
按热度按时间ergxz8rk1#
正则表达式限定符
*
默认为 greedy,因此尽可能多地消耗,然后根据需要回溯。这就是$1
包含economy/billing/payment-check/434
的原因(即尽可能多地满足正则表达式)。尽管,这是假设.htaccess
文件在文档根中(这是“MWL测试器”所假设的)。如果您只想匹配单个路径段,则从捕获子模式中排除斜线,例如
([^/]+)
。另外,根据规则的性质,我假设这个
.htaccess
文件位于/economy/billing/payment-check/
子目录中(不是根目录)?“MWL测试器”工具假定.htaccess
文件位于文档根目录中(而且这是不能改变的)。事实上,如果X1 M8 N1 X文件位于子目录中,这将在您的服务器上“工作”,然而,这并不是最优的,因为在URL结构中给定变化的情况下,它仍然可能潜在地匹配太多。如果
.htaccess
文件位于/economy/billing/payment-check/.htaccess
,则使用以下命令:正则表达式
[^/]+
匹配除斜杠以外的内容。但是,如果规则在根
.htaccess
文件中(MWL测试人员所期望的),则规则需要如下所示:注意,第一个捕获子模式现在是URL-path,它在 substitution 字符串(第二个参数)中重复出现,这样就避免了在第二个参数中手动重复URL-path。
看起来你的URL在路径段中需要特定的数据类型。例如,第一、第三和第五个“参数”看起来只有数字。如果是这种情况,那么你应该是特定的,只匹配数字。同样,第四个“参数”是大写字母,第二个是小写字母。所以,特定的,可以如下重写(子目录中包含
.htaccess
文件):然后它只匹配您期望的URL的 * 格式 *。