微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

301 重定向:新的域和 URL 结构

如何解决301 重定向:新的域和 URL 结构

我需要设置从旧域到新域的重定向。 URL 结构也会有所不同,因为我们将使用不同的 CMS。我需要强制使用 HTTPS 和非 www。

对于这种情况,下面的代码是否正确?

# Needed before any rewriting
RewriteEngine On

# Force HTTPS and non-WWW
RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com$ [NC]
RewriteRule ^ https://www.newdomain.com%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.newdomain.com%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

## 301 Redirects
# Page to Page
RewriteCond %{HTTP_HOST}  ^olddomain\.com$ [NC]
RewriteCond %{QUERY_STRING}  ^$
RewriteCond %{HTTPS} =on
RewriteRule ^collections/product/product-1$ https://newdomain.com/product/product-1? [R=301,NE,NC,L]
RewriteRule ^collections/product/product-2$ https://newdomain.com/product/product-2? [R=301,L]

上面的代码和a有什么区别

Redirect 301 /collections/product/product-1 https://www.newdomain.com/product/product-1

一个比另一个更受欢迎吗?

解决方法

以下列方式将其设为 .htaccess 文件。

第一种方法:在这里修复 OP 的尝试。

# Needed before any rewriting
RewriteEngine On

# Force HTTPS and WWW to non-www/www URLs.
RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com$ [NC]
RewriteRule ^ https://www.newdomain.com%{REQUEST_URI} [L,NE,R=301]

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

## 301 Redirects
# Page to Page
RewriteCond %{HTTP_HOST}  ^(www\.)?olddomain\.com$ [NC]
RewriteCond %{QUERY_STRING}  ^$
RewriteCond %{HTTPS} =on
RewriteRule ^collections/product/product-1$ https://newdomain.com/product/product-1? [R=301,NC,L]

RewriteCond %{HTTP_HOST}  ^(www\.)?olddomain\.com$ [NC]
RewriteCond %{QUERY_STRING}  ^$
RewriteCond %{HTTPS} =on
RewriteRule ^collections/product/product-2$ https://newdomain.com/product/product-2? [R=301,L]


第二种方式: 如果您只有 collections/product/product-1 AND collections/product/product-2 规则,请在此处使用技巧将它们转换为单个规则,然后尝试遵循并保存更多条件/规则:)

# Needed before any rewriting
RewriteEngine On

# Force HTTPS and WWW to non-www/www URLs.
RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com$ [NC]
RewriteRule ^ https://www.newdomain.com%{REQUEST_URI} [L,R=301]

## 301 Redirects
# Page to Page
RewriteCond %{HTTP_HOST}  ^(www\.)?olddomain\.com$ [NC]
RewriteCond %{QUERY_STRING}  ^$
RewriteCond %{HTTPS} =on
RewriteRule ^collections/product/product-([12])$ https://newdomain.com/product/product-$1? [R=301,L]

与 OP 问题相关的要点:

  • 我已经删除了您的第二组 htaccess 规则,如下所示。为什么,因为您的第一个规则集本身负责将 www 或非 www 重定向到 www URL,因此您无需继续关注这些规则。

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.newdomain.com%{REQUEST_URI} [L,R=301]
  • 现在再说一点,我在您的规则中添加了 NE 标志,用于将 url 保持在相同的格式(而不是将它们转换为六进制形式)。

  • 现在关于重定向规则 Redirect 301 /collections/product/product-1 https://www.newdomain.com/product/product-1 的问题很简单,如果你只保留这 1 行,那么你的 https 和 www 将不会被实现,以防 URL 不是 https 或 www,所以它完全取决于您的要求,如果您需要实施 https 和 www,则保持上面显示的 htaccess(根据您显示的尝试进行编辑)。但是你仍然需要有重定向规则,因为你要去新的域,所以只用上面显示的方式。

  • 也已将其放入正则表达式 (www\.)? 中,以便在您的评论 ## 301 Redirects 下的条件下匹配 www(由于我们已完成重定向以前的规则,因此会在那里)。>

注意: 使用第 1 条规则或一次使用第 2 条规则,首选第 2 条规则(如果它符合我提到的您拥有 url {{1 }} 或 product-1)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。