gpt4 book ai didi

.htaccess - RewriteRule中多个RewriteCond的引用捕获组

转载 作者:行者123 更新时间:2023-12-04 01:02:35 24 4
gpt4 key购买 nike

当我将多个RewriteCond链接在一起时,只能使用%0-%9引用最后一个RewriteCond的捕获组。

在以下问题中,URL的查询字符串中的参数可以采用任何顺序。要将它们解析为精美的网址,我需要分别匹配查询字符串中的每个参数:

RewriteCond %{QUERY_STRING} param1=([^&]+)
RewriteCond %{QUERY_STRING} param2=([^&]+)
RewriteCond %{QUERY_STRING} param3=([^&]+)
RewriteRule ^foo$ bar/%1/%2/%3/ [R]


就像我指出的那样...这行不通。为了解决这个问题,我可以在下一个RewriteCond中引用前一个RewriteCond的捕获组,并将每个参数“传播”到实际的RewriteRule中:

RewriteCond %{QUERY_STRING} param1=([^&]+)
RewriteCond %1&%{QUERY_STRING} ^([^&]*)&.*param2=([^&]+)
RewriteCond %1&%2&%{QUERY_STRING} ^([^&]*)&([^&]*)&.*param3=([^&]+)
RewriteRule ^foo$ bar/%1/%2/%3/ [R]


这应该可以,但是对于每个其他参数,它会变得更加混乱。另一种解决方案可能是解析一个参数并在每个参数之后重定向客户端(导致冗长的重定向链,我希望避免这种情况)。

是否有一种更干净的方法来访问RewriteRule中所有RewriteCond的捕获组(例如,是否可以命名它们或将它们分配给变量,以便我可以在其他地方引用它们?)

最佳答案

您可以尝试在重写条件内构造目标URL:

RewriteCond ##%{QUERY_STRING}      (.*)##(|.*&)param1=([^&]+)
RewriteCond %1/%3##%{QUERY_STRING} (.*)##(|.*&)param2=([^&]+)
RewriteCond %1/%3##%{QUERY_STRING} (.*)##(|.*&)param3=([^&]+)
RewriteCond %1/%3##%{QUERY_STRING} (.*)##(|.*&)param4=([^&]+)
RewriteCond %1/%3##%{QUERY_STRING} (.*)##(|.*&)param5=([^&]+)
RewriteCond %1/%3##%{QUERY_STRING} (.*)##(|.*&)param6=([^&]+)

RewriteRule ^foo$ /bar%1/%3? [L,R]


当我尝试要求时:

/foo?param1=a&param2=b&param6=3&param3=4&param5=5&param4=6

我被重定向到:

/bar/a/b/4/6/5/3

添加任何其他必需的查询字符串参数不会使它看起来比现在看起来更加混乱。

关于.htaccess - RewriteRule中多个RewriteCond的引用捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17784942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com