.htaccess永久重定向比较

时间:2017-02-13 03:33:04

标签: apache .htaccess redirect mod-rewrite

对于某些用例,这两个.htaccess片段的行为是否相同,或者对另一个片段有什么好处?

目标是更改网站的域名,从www.oldexample.com更改为www.newexample.com。它应该考虑来自www.oldexample.com的子目录和页面,这些子目录和页面将继续存在于www.newexample.com的相同路径下。

Snippet 1

RewriteEngine on
RewriteCond %{HTTP_HOST} ^oldexample.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.oldexample.com [NC]
RewriteRule ^(.*)$ https://www.newexample.com/$1 [L,R=301,NC]

Snippet 2

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*) https://www.newexample.com%{REQUEST_URI} [L,R=301,NC]

例如,当包含这些片段之一的.htaccess文件放在www.oldexample.com的根目录中时,当有人请求时:

www.oldexample.com/subdirectory/hello-world.php

应将它们重定向到:

www.newexample.com/subdirectory/hello-world.php

提前致谢!

1 个答案:

答案 0 :(得分:2)

要么工作。唯一显着的区别是在第一个中检查HTTP_HOST。如果其他主机由包含.htaccess文件的同一文件夹提供,则必须执行此操作。否则他们没有必要。 Options +FollowSymlinks是必要的,但可能已经设置在主配置级别,如果没有它,重写将无法工作。

我建议您使用:

RewriteEngine On
RewriteRule ^ https://www.newexample.com%{REQUEST_URI} [L,R=301]

基本上是选项二,但清理后删除了不必要的东西(在匹配中没有指定大小写的情况下,未使用的捕获和无意义的大小写不敏感。)

但实现相同目标的一种更简单的方法就是:

Redirect 301 / https://www.newexample.com/

如果您需要检查主机,请使用:

RewriteEngine On
RewriteCond %{HTTP_HOST} (?:^|\.)oldexample.com$
RewriteRule ^ https://www.newexample.com%{REQUEST_URI} [L,R=301]

哪个匹配oldexample.comanything.oldexample.com。如果这不符合您的需求,请告诉我。