如何解决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 举报,一经查实,本站将立刻删除。