对于某些用例,这两个.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
。
提前致谢!
答案 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.com
和anything.oldexample.com
。如果这不符合您的需求,请告诉我。