因为 chdzone 这个网站已经有好几年没维护了,占着个二级域名还要维护证书,颇觉浪费,遂将其移动到主域名目录下。
问题
单纯的只要把数据移动到新位置其实就可以,但互联网上仍有很多地方保留有旧的 URL ,如果用户去点击这些旧的 URL 的话,就会出现 404 错误。数据都还在的,但是位置变了。这里就要实现不仅仅是域名的变更,还要实现旧 URL 跳转到新 URL 的无缝跳转。
探寻
网站搬家使用 301 跳转是毋庸置疑的,可选语言不多,php,js,还有一些五花八门的方法。
在网上搜了一下 301 跳转,彰显天下文章一大抄的特点。几乎所有文章都是只写了表皮,其结果就是:
不论用户输入的网址是什么,均跳转到新网址的根目录。
用户点击旧的 URL 但是却跳转到新网址的根目录下,淘宝天猫尿得好。
尝试
首先考虑下网站结构以及之前对外公开的 URL,原网站是纯静态网址,所有页面都是无参数的静态 URL。因为地址不是参数,index.php 不能直接读取,依靠 PHP 进行跳转就不可能了。同理 js 也有相同的问题。
所以就只能靠 mod_rewrite 来实现了。
开始搬家
首先把静态文件转移到新地址。
之后编辑原地址的 .htaccess 文件
1 2 3 4 5 |
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)$ "https://www.catscarlet.com/site/chdzone/$1" [L,R=301,NC] </IfModule> |
为确保 .htaccess 能够生效,需要检查 apache2.conf 中的 AllowOverride 是否为 None,如果为 None 的话 .htaccess 是无法覆盖默认配置的。
为确保 rewrite 能够生效,需要启动 mod_rewrite 。如果没有启动的话,执行:
1 2 |
a2enmod rewrite systemctl reload apache2.service |
这样就 OK 了
1 2 3 4 5 6 |
[root@localhost ~]# curl https://chdzone.catscarlet.com/map.html -I HTTP/1.1 301 Moved Permanently Date: Mon, 23 Apr 2018 10:00:29 GMT Server: Apache/2.4.18 (Ubuntu) Location: https://www.catscarlet.com/site/chdzone/map.html Content-Type: text/html; charset=iso-8859-1 |
1 2 3 4 5 6 7 8 9 10 |
[root@localhost ~]# curl https://chdzone.catscarlet.com/map.html <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>301 Moved Permanently</title> </head><body> <h1>Moved Permanently</h1> <p>The document has moved <a href="https://www.catscarlet.com/site/chdzone/map.html">here</a>.</p> <hr> <address>Apache/2.4.18 (Ubuntu) Server at chdzone.catscarlet.com Port 443</address> </body></html> |
补充资料
注意我的服务端是 Apache ,对于其他 HTTP 服务端并不适用。
2 comments
法律派
2018 年 4 月 26 日 在 下午 4:34 (UTC 8) Link to this comment
以前用wordpress建站,换了不少主机商,网站数据也是删了多次,又上传。现在用这个平台,感觉还很省事。
钛客志
2018 年 4 月 29 日 在 上午 11:12 (UTC 8) Link to this comment
网上那些跳转方案,确实根本就不能指定域名跳转到新的域名,跳到新域名倒是没问题,其他都是404,博主的方案参考了