.htaccess 变更网域:301多语言电子商务站点重定向

tktrz96b  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(107)

我正在移动我的WP电子商务网站到一个新的域,我需要编码一个更先进的htaccess 301重定向传递搜索引擎优化的爱。(我说htaccess,但也许有一个服务器端的方式更好)
我已经确保,尽可能多地,以保持相同的URL结构,所以对于产品/职位,类别,标签和大多数网页的一切后的olddomain.com/XXXXX是相同的。
然而,我不想做一个毯子重定向的一切,因为有一些部分的网站,将不匹配,所以我认为它更好地打破成块/功能. (也许这是一个坏的策略,我应该只是做一个毯子重定向和故障排除页面没有找到,因为它都去现场?)

  • 产品重定向功能
  • 类别重定向功能
  • 标签重定向功能
  • 其余部分的单独重定向

还有三种语言的子文件夹/ca//es/-example.com/es/products-假设我可以复制每种语言的函数并附加子文件夹。
示例:

oldomain.com/product/any-product-ABC

重定向到

newdomain.com/product/any-product-ABC
(Domain change) (folder same) (product added from previous)

然后对语言进行相同重定向

oldomain.com/es/product/any-product-ABC

重定向到

newomain.com/es/product/any-product-ABC

如何编写上述重定向?

neekobn8

neekobn81#

我说htaccess,但也许有一个服务器端的方式更好
如果您可以访问Apache服务器配置,那么您确实可以简化这些重定向,这也将更有效,因为它将减少来自主站点的负载(如果有的话)。
为旧域创建一个单独的<VirtualHost>容器,然后可以使用更简单的mod_alias指令。
例如,对于您在新域中为同一URL提供的两个示例,例如/product/<product-name>/<lang-code>/product/<product-name>,则可以使用以下单个规则:

RedirectMatch 301 ^(/[a-z]{2})?/product/[\w-]+$ https://newdomain.com/$0

这与任何 * 可选 * 的2个字符的语言代码匹配。如果您只有三种语言,那么您可以更具体地使用regex alternation 来代替,例如(ca|es|id)代替[a-z]{2}<product-name>被假定为只包含以下字符:a-zA-Z0-9_(下划线)和-(连字符)。
但是,如果您被限制为.htaccess,并且两个域解析到相同的位置,则您需要使用mod_rewrite并检查请求的主机名。例如,以下内容需要接近根.htaccess文件的顶部:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^olddomain\.com [NC]
RewriteRule ^((ca|es|id)/)?product/[\w-]+$ https://newdomain.com/$0 [R=301,L]

请注意,该正则表达式与上面使用的mod_alias RedirectMatch指令略有不同,因为RewriteRulepattern(第一个参数)匹配的URL路径不带斜杠前缀。
如果RewriteEngine指令已经出现在配置文件中的其他位置,请不要重复它。指令的顺序很重要。上述重定向必须在任何现有的内部重写之前进行,最好在任何规范重定向之前进行(以最小化重定向的次数)。
您应该首先使用302(临时)重定向进行测试,以避免潜在的缓存问题。
所以我认为最好分成块/函数。
这很公平。不过你需要确保任何你没有从旧域重定向的URL返回404或410。
并且可能将“产品”、“类别”和“标签”组合成单个规则,这完全取决于这些URL的格式。

相关问题