.htaccess 如何在htaccess中通过更改动态url的一部分进行重定向

8wtpewkr  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(155)

所以这里的问题。我正在使用Elementor Pro为woocomerce和插件重定向订单完成到一个错误的网址。目前没有办法解决这个问题。
现在唯一的解决方法是从下面的链接将?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>
cbjzeqam

cbjzeqam1#

RewriteRule ^?elementor_library=single-product/order-received/?$    /checkout/order-received/$1 [R=301,L]

RewriteRulepattern(第一个参数)只匹配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是一个速记字符类,它与字符a-zA-Z0-9_(下划线)匹配,这似乎涵盖了示例中key URL参数的值。
其中%1%2是对前面的 CondPatternRewriteCond指令)中的捕获子组的反向引用。
NE标志只是为了确保从URL字符串复制的值不是双重URL编码的(尽管在所发布的示例中不应该发生这种情况)。
你应该先用一个302(临时)重定向来测试,以避免潜在的缓存问题。并且在测试之前清除你的浏览器缓存。
此外,这里没有使用RewriteBase指令,<IfModule> Package 器很可能是多余的。
还要注意,指令的顺序很重要。这条规则可能需要放在.htaccess根文件的顶部附近,当然是在WordPress代码块之前。

相关问题