[英]How to 301 redirect by changing part of a dynamic url in htaccess
所以这就是问题所在。 我正在将 Elementor Pro 用于 woocomerce,并且插件将订单完成重定向到错误的 url。 目前没有办法解决这个问题。
现在修复它的唯一方法是将?elementor_library=single-product
从以下链接更改为checkout
。
我想重定向
https://domain.co.uk/?elementor_library=single-product/order-received/2786/&key=wc_order_i6GIKeD0SaNM9
至
https://domain.co.uk/checkout/order-received/2786/?key=wc_order_i6GIKeD0SaNM9
这是我的 htaccess 代码
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Checkout Page
RewriteRule ^?elementor_library=single-product/order-received/?$ /checkout/order-received/$1 [R=301,L]
</IfModule>
RewriteRule ^?elementor_library=single-product/order-received/?$ /checkout/order-received/$1 [R=301,L]
RewriteRule
模式(第一个参数)仅与 URL 路径匹配,而不是查询字符串,因此它永远不会匹配指定的 URL(它由一个大的查询字符串和“空”URL 路径组成)——所以什么都不做。
您也只匹配查询字符串的一部分,并且由于您使用的是字符串结尾锚,它永远不会匹配所述查询字符串。
您还使用了$1
反向引用,但在RewriteRule
模式中没有捕获子组。 所以, $1
总是空的。
要匹配查询字符串,您需要使用RewriteCond
指令并匹配QUERY_STRING
服务器变量。
所以
?elementor_library=single-product
应该改为checkout
这不是您在示例中所做的唯一事情。 您正在将查询字符串的一部分转换为 URL 路径,但在查询字符串中保留key
URL 参数。
请尝试以下操作:
RewriteCond %{QUERY_STRING} ^elementor_library=single-product/order-received/(\d+)/&key=(\w+)$
RewriteRule ^$ /checkout/order-received/%1/?key=%2 [NE,R=301,L]
这会将/?elementor_library=single-product/order-received/<number>/&key=<code>
形式的 URL 重定向到/checkout/order-received/<number>/?key=<code>
\w
是与字符az
、 AZ
、 0-9
和_
(下划线)匹配的简写字符类,它似乎涵盖了示例中key
URL 参数的值。
其中%1
和%2
是对前面CondPattern ( RewriteCond
指令)中捕获子组的反向引用。
NE
标志只是为了确保从 URL 字符串复制的值不是双重 URL 编码的(尽管在发布的示例中不应该发生这种情况)。
您应该首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。 并在测试前清除浏览器缓存。
此外,这里没有使用RewriteBase
指令,并且<IfModule>
包装器很可能是多余的。
另请注意,指令的顺序很重要。 此规则可能需要靠近根.htaccess
文件的顶部,当然是在WordPress 代码块之前。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.