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-1
和 collections/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-1
或 product-2
)
我需要设置从旧域到新域的重定向。 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-1
和 collections/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-1
或 product-2
)