问题就在这里。我正在使用元素专业woocommerce和插件重定向订单完成到一个错误的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-path) -所以什么也不做。
您也只匹配查询字符串的一部分,并且由于您使用的是字符串结束锚,因此它永远不会匹配所述查询字符串。
您还使用$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
是一个速记字符类,它匹配字符a-z
,A-Z
,0-9
和_
(下划线),它似乎覆盖了示例中key
URL参数的值。
其中%1
和%2
是对前面CondPattern(RewriteCond
指令)中的捕获子组的反向引用。
NE
标志只是为了确保从URL字符串复制的值不是双重URL编码的(尽管这不应该发生在张贴的示例中)。
您应该首先使用302(临时)重定向进行测试,以避免潜在的缓存问题。并在测试前清除浏览器缓存。
另外,这里没有使用RewriteBase
指令,<IfModule>
包装器很可能是多余的。
还要注意,指令的顺序很重要。这个规则可能需要放在根.htaccess
文件的顶部,当然是在WordPress代码块之前。