如何通过改变htaccess中动态url的一部分来实现301重定向



问题就在这里。我正在使用元素专业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路径,但在查询字符串中保留keyURL参数。

试试下面的命令:

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_(下划线),它似乎覆盖了示例中keyURL参数的值。

其中%1%2是对前面CondPattern(RewriteCond指令)中的捕获子组的反向引用。

NE标志只是为了确保从URL字符串复制的值不是双重URL编码的(尽管这不应该发生在张贴的示例中)。

您应该首先使用302(临时)重定向进行测试,以避免潜在的缓存问题。并在测试前清除浏览器缓存。

另外,这里没有使用RewriteBase指令,<IfModule>包装器很可能是多余的。

还要注意,指令的顺序很重要。这个规则可能需要放在根.htaccess文件的顶部,当然是在WordPress代码块之前。

相关内容

  • 没有找到相关文章

最新更新