301 重定向:新域和 URL 结构

301 Redirect: New Domain and URL Structure

我需要设置从旧域到新域的重定向。 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,NE,NC,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,NE,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,NE,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,NE,NC,L]


第二种方式: 如果你只有 collections/product/product-1collections/product/product-2 规则然后尝试遵循并再保存一个 condition/rules :)

# 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,NE,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-? [R=301,NE,NC,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 将不会被实施以防万一 URLs不是 https 或 www,所以这完全取决于您的要求,如果您需要实施 https 和 www,则保留上面显示的 htaccess(根据您显示的尝试进行编辑)。但是你仍然需要有重定向规则,因为你要去新的域,所以只用上面显示的方式。

  • 也已将其放入正则表达式 (www\.)? 以匹配万一 www 存在(自从我们完成重定向之前的规则后将会存在)在您的评论 [=18= 条件下].

注意:一次使用第一条规则或第二条规则,首选第二条(如果符合我提到的建议你有网址 product-1product-2)