.htaccess 将最后五个目录重写为 GET 值
P粉451614834
P粉451614834 2024-01-17 00:29:03
0
1
384

我有以下网址:

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粉451614834
P粉451614834

全部回复(1)
P粉384679266

正则表达式量词 * 默认情况下是贪婪,因此会消耗尽可能多的内容,然后根据需要回溯。这就是为什么 $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]

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!