通过.htaccess设置伪静态,实现了一个虚拟主机多个网站,后来发现这种方法,只能让首页地址指另一个网站,而不能把该地址所有的链接都和其他一个网站隔离开,比如blog.wangrufei.com/a.html这个网址是我的博客地址,但我访问wangrufie.com/a.html也能正常访问,而且两个网址的内容一模一样,这对seo来说不太好。

所以,决定只用一个网址了,于是又开始折腾了,不出意料,又遇到了一些问题,汇总如下:

404 not found解决方法

域名blog.wangrufei.com,从数据库更换成wangrufei.com后,系统后台无法保存设置,且前段文章分类标签等链接点击后提示404 not found。以为重装系统可以解决,但结果依然有改问题。

后来发现,原来是强制开启伪静态的原因,关掉就好,如果非要开启,需要在系统跟目录创建.htaccess,添加如下内容。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]

添加全站301重定向

由于更换网址,需要把之前网站所有链接指向新网址,阿里云虚拟主机控制面板可以直接301重定向,不过设置后不生效,发起工单也未能解决,只能再次重网上查看解决方法,在.htaccess添加301指令就可以实现了,内容如下:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^blog.wangrufei.com [NC]
RewriteRule ^(.*)$ https://wangrufei.com/$1 [L,R=301,NC]

注意:重定向一定要添加到文件最顶部,不然就会出现旧网址文章链接全都重定向到首页的现象,且链接后面自动添加/index.php。

所有http链接301重定向到https,添加如下内容

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

如果有多个301重定向规则,RewriteEngine On 可以合并成一个,放到最顶部即可。

参考资料

  1. typecho开启地址重写静态 提示404 not found
  2. SEO 的 301 重定向:你需要知道的一切