由于我们的产品已经从一个编码框架切换到另一个编码框架,我们需要修改旧的第三方的一些回调URL以实现向后兼容。基本上以下两个应该有效:
/oldLms/index.php?r=controller/action&code=randomCode
/lms/?r=site/newEndpoint&code=randomCode
旧的oldLms
目录现在不存在。这就是为什么我们需要htaccess将请求从第一个转发到第二个。
重要点如下:
code
查询参数应作为查询参数传递给新网址。r
查询参数应该不,因为我们已经将新的r
硬编码为将处理新逻辑的目标。传递旧的r
(在这种情况下是控制器/动作)会使新框架混淆为认为我们正在请求别的东西。这就是我们现在所处的位置:
RewriteCond %{QUERY_STRING} (^|&)r=controller/action(&|$) [NC]
RewriteCond %{QUERY_STRING} (^|&)code=(.*)(&|$) [NC]
RewriteRule ^oldLms/(.*) /lms/?r=site/newEndpoint&code=$4 [L,NC,QSA,R=302]
但是,这似乎不起作用,因为$4
不会从原始网址返回code
查询字符串参数的值。
答案 0 :(得分:0)
自我回答:
RewriteCond %{QUERY_STRING} (^|&)r=controller/action(&|$) [NC]
RewriteCond %{QUERY_STRING} (^|&)code=(.*)(&|$) [NC]
RewriteRule ^oldLms/(.*) /lms/?r=site/newEndpoint&code=%2 [L,NC,R=302]
r
参数)。%number
代替$number
来从查询字符串而不是原始网址中定位选择器。此外,在这种情况下,它必须是%2
而不是%4
。