在同一个域名内重定向
在网站根目录下配置 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/