我已经成功地完成了通配符301的重定向,但是我想知道是否有必要保留强制使用HTTPS的重写规则以及.htaccess文件中代码的顺序是否重要。
例如,我应该将重定向链从http://oldsite.com到https://oldsite.com到https://newsite.com
这是旧网站上的.htacess文件:
# HTTPS forced by SG-Optimizer
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
# END HTTPS
#REDIRECT
Redirect 301 / https://newsite.com/
#END REDIRECT
答案 0 :(得分:3)
首先,将mod_rewrite
指令与Redirect
或RedirectMatch
指令混合使用是一个坏主意,因为它们是Apache中的不同模块,并且不同模块的执行顺序不同。
第二,您还应避免在浏览器中引起多次重定向,因为这被认为是不良的用户体验,并且还将给您的Web服务器造成不必要的负担。
您应将特定的重定向规则放置在通用http -> https
之前,如下所示:
<IfModule mod_rewrite.c>
RewriteEngine On
#REDIRECT
RewriteCond %{HTTP_HOST} ^(?:www\.)?oldsite\.com$ [NC]
RewriteRule ^ https://newsite.com%{REQUEST_URI} [L,NE,R=301]
#END REDIRECT
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
# END HTTPS
通过这种方式,将oldsite.com
的所有流量都通过一次重定向重定向到https://newsite.com
。
仅当您支持http -> https
以外的任何其他网站时,才会执行您的oldsite.com
重定向。