使用 htaccess 重定向页面规则

使用 htaccess 重定向页面规则
使用 htaccess 重定向页面规则

在同一个域名内重定向

在网站根目录下配置 htaccess 文件,将一个页面重定向到另一个页面的方式是:

RewriteRule ^url-string-to-redirect$ http://www.yourdomain.com/your-new-url-string [R=301,L]

或者

Redirect 301 /path/to-old-url    http://www.cyourdomain.com/path/to-new-url

要将整个目录的内容重定向到另一个目录,请使用以下命令:

RewriteRule ^subdirectory/(.*)$ /anotherdirectory/$1 [R=301,NC,L]

要将整个目录的内容重定向到网站根目录:

RewriteRule ^subdirectory/(.*)$ /$1 [R=301,NC,L]

将子目录的内容重定向到另一域名但在相同目录中:

Redirect 301 /subdirectory http://www.anotherdomain.com/subdirectory

确保在 .htaccess 文件的开头,包含以下 2 行代码,它使 Apache 模块能够重写 URL,然后将重定向放在它们下面:

Options +FollowSymLinks
RewriteEngine On

重定向到不同域名

使用 .htaccess 中的 301 重定向将 URL 从旧域名重定向到新域名

当网站需要从旧域名切换到新域名时,需要重定向所有页面的 URL,此时 htaccess 便可以派上用场。

下面的代码将为 www 和非 www 版本的 ‘ olddomain.com ‘创建 301 url 重定向到新域 ‘ newdomain.com ‘。

.htaccess 文件添加到旧站点 webroot 并将文件从旧站点上传到新站点,以查看从旧域到新域的无缝切换。

在下面的示例中将所有 URL 从 olddomain.com 重定向到 newdomain.com

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^olddomain.com [NC,OR] 
RewriteCond %{HTTP_HOST} ^www.olddomain.com [NC] 
RewriteRule ^(.*)$ http://newdomain.com/$1 [L,R =301,NC]

以上使用非 www 域名作为跳转到的域名。

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\.olddomain\.com$ 
RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L] 
RewriteCond %{HTTP_HOST} !^olddomain\. com$ 
RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L]

上面的内容会将所有 url 从一个域名 301 重定向到另一个域名,但选择跳转到带 www 的版本。

也可以将该跳转应用于子域名,因此下面的示例将所有 URL 从 subdomain.olddomain.com 重定向到subdomain.newdomain.com

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^subdomain.olddomain.com$ 
RewriteRule ^(.*)$ http://subdomain.newdomain.com/$1 [R=301,L] 
RewriteCond %{HTTP_HOST} ^www.subdomain.olddomain.com$ 
RewriteRule ^(.*)$ http://subdomain.newdomain.com/$1 [R=301,L]

还可以对域名进行伪装,看起来访问的是旧域名的 URL,但实际上显示的是新域名的内容。例如,如果我们刚刚将域更改为 newdomain.com,但仍有用户访问 olddomain.com,就可以使用下面的代码,看起来显示的是旧的域名,实际上是新域名的内容:

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^olddomain.com 
RewriteRule ^(.*) http://newdomain.com/$1 [P]

下面的代码段会将所有 url 从一个域名重定向到另一个域名,当要更改域名但保持相同的内容和结构时非常方便,下面的目标 URL 是不带 WWW 且带 HTTPS 的:

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^olddomain.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.olddomain.com$ 
RewriteRule (.*)$ https://newdomain.com/$1 [R=301,L]

使用 htaccess 强制目录文件夹或网站通过 HTTPS(SSL)访问

要强制网站通过 HTTPS 访问,可以对网站根目录下的 .htaccess 文件进行如下编辑:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

要强制特定文件夹或目录通过 SSL 提供服务,请在该文件夹中创建一个 .htaccess 文件并对其应用以下内容:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} somefolder 
RewriteRule ^(.*)$ https://www.domain.com/somefolder/$1 [R,L]

这假设在启用了 mod_rewrite 模块的 Apache Web 服务器上的域上启用了 SSL。

使用 htaccess 将 WWW 域名重定向到非 WWW 域名

RewriteEngine On 
RewriteBase / 
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

只要将它添加到 htaccess 文件的最顶部即可。

原创文章,作者:牛奇网,如若转载,请注明出处:https://www.niuqi360.com/linux/htaccess-301-redirect-rules/

发表评论

登录后才能评论