繁体   English   中英

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

[英]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是与字符azAZ0-9_ (下划线)匹配的简写字符类,它似乎涵盖了示例中key URL 参数的值。

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

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

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

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

另请注意,指令的顺序很重要。 此规则可能需要靠近根.htaccess文件的顶部,当然是WordPress 代码块之前。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM