语雀的个人使用目前是不支持自定义域名的,虽然空间的使用可以自定义二级域名,如:weiyan.yuque.com,但是空间知识库必须要先登录,不方便其他人查看,尤其是对于没有注册语雀的用户。

我有一个已经备案的个人域名 www.example.com,现在我想:

反正就一句话,让下面的链接都跳转到 https://www.yuque.com/shenweiyan

下面简单记录一下具体的实现过程。

背景知识

显性URL转发:用的是301重定向技术,效果为浏览器地址栏输入 http://a.com 回车,打开网站内容是目标地址 http://cloud.baidu.com/ 的网站内容,且地址栏显示目标地址 http://cloud.baidu.com/

隐性URL转发:用的是 iframe 框架技术、非重定向技术,效果为浏览器地址栏输入 http://a.com 回车,打开网站内容是目标地址 http://cloud.baidu.com/ 的网站内容,但地址栏显示当前地址 http://a.com

301 重定向是什么?

301 重定向表示网页由一个地址永久地移动到了另外一个地址。这里中的 301 是被重定向网页的 HTTP 状态代码。

例如:blog.ahrefs.com 重定向到了 ahrefs.com/blog

简单来说,301 重定向是在告诉浏览器:“这个页面已经永久迁移了。这个是新的地址,我们不打算把它移回去啦。”这时,浏览器会回复:“没问题!我现在(开始)就把用户引向这里!”

这就是为什么访问 blog.ahrefs.com 已经不可能了。你最后会去到的网页是 ahrefs.com/blog。

前提条件

前提条件可以分为有服务器和无服务器两种情况,下面具体说一下。

  1. 有服务器(可以考虑腾讯云或者阿里云的轻量云服务器,双十一优惠价一年也就几十块);

    • 阿里云轻量云服务器:购买链接
    • 腾讯云轻量云服务器:购买链接
    • 域名(域名需要已经完成备案);
    • SSL 证书(可以使用阿里云或者腾讯云的免费域名证书);
  2. 无服务器

    • 可以考虑使用 Cloudflare Page Rules(页面规则);当然,其他的平台也可以;
    • 域名(可以不用备案);
    • SSL 证书(如果你用的是 Cloudflare Page Rules,可以不用 SSL 证书 )。

操作步骤:有服务器

本操作以 ncbix.com 域名为示例。

1. 域名解析

在你的域名供应商后台点击“添加记录”,分别输入 www 和 @,记录类型“A”,记录值就是你虚拟主机或 VPS 服务器的 IP 地址,最后保存。以 DNSPOD 为例。
image.png

2. SSL 证书

申请免费证书,具体操作可以自行百度。以腾讯云为例:https://console.cloud.tencent.com/ssl
image.png
根据截图,一步步点击操作。申请完成后,把证书下载并上传到你的服务器。
image.png

3. 安装 Nginx

可以直接使用 yum/apt 的方式直接安装;源码方式的安装,参考:《CentOS 7 下编译安装 Nginx · 语雀》。

  1. #Debian/Ubuntu
  2. apt update
  3. apt install nginx
  4. #CentOS
  5. yum install nginx

4. 配置 Nginx

通过 yum/apt 安装的 Nginx 默认的置文件在 /etc/nginx/nginx.conf,编辑该文件。

  1. http {
  2. ##
  3. # Basic Settings
  4. ##
  5. ......
  6. ##
  7. # Virtual Host Configs
  8. ##
  9. server {
  10. listen 80;
  11. listen 443 ssl;
  12. server_name ncbix.com www.ncbix.com;
  13. ssl_certificate /etc/nginx/ssl/Nginx/1_www.ncbix.com_bundle.crt;
  14. ssl_certificate_key /etc/nginx/ssl/Nginx/2_www.ncbix.com.key;
  15. index index.php index.html index.htm;
  16. if ( $scheme = "http" ) {
  17. return 301 https://www.yuque.com/shenweiyan$request_uri;#确保跳转到新域名HTTPS如果没有HTTPS可以去掉
  18. }
  19. location / {
  20. rewrite /.* https://www.yuque.com/shenweiyan$uri redirect; #跳转到新域名并重写为新域名
  21. }
  22. }
  23. include /etc/nginx/conf.d/*.conf;
  24. include /etc/nginx/sites-enabled/*;
  25. }

5. 重启 Nginx

最后,通过下面的命令重启 Nginx 服务即可。

  1. service nginx restart

操作步骤:无服务器

我们以 Cloudflare Page Rules 为例,说明一下具体怎么操作。

1. Cloudflare 中添加站点

image.png
添加完站点后,可以选择 Free 计划,然后点击继续:
image.png
点击继续后,Cloudflare 会自动扫描你对应域名的一些解析记录:
image.png
我们可以直接选择”继续”。
image.png

2. 修改域名 DNS

首先,我的域名是在腾讯云注册的,可以去腾讯云控制台”我的域名” 中直接修改 DNS:

  1. # 添加 Cloudflare 名称服务器
  2. imani.ns.cloudflare.com
  3. caroline.dnspod.net

image.png
image.png

3. 完成 Cloudflare 添加站点

可以把后面快速指南的这几个配置都勾选。
image.png
等待几分钟就可以看到你的域名站点已经添加到 Cloudflare 上了!
image.png

4. 设置 DNS 记录

The first thing you will need is a DNS record for @, www and any other subdomains you want to redirect, set to image.png. This can point to any IP address as the redirection page rule will execute first. I would recommend pointing them to 192.0.2.1 , a dummy IP.

From:https://community.cloudflare.com/t/redirecting-one-domain-to-another/81960

在配置 Cloudflare 站点的页面规则前,你需要把该域名的 @www 或者其他你想要进行重定向的子域名添加到 DNS 记录中,这个记录的值可以指向任何 IP 地址,因为重定向页面规则将首先执行。我建议将它们指向 192.0.2.1 ,一个虚拟 IP。

在这里,我们以 @ 和 note 子域名为例,添加 DNS 记录。
image.png

5. 配置 Cloudflare 站点页面规则

首先,在 Cloudflare 的主页上点击对应的站点,选择 “页面规则”,点击。
image.png
点击”创建页面规则”:
image.png
image.png
image.png
image.png

什么是页面规则?

页面规则为 Cloudflare 设置提供基于 URL 的粒度控制。关于页面规则需要了解的最重要事情是,针对一个 URL 仅触发一个页面规则,因此一定要按照优先级顺序对页面规则进行排序并将最具体的页面规则放在顶部。

页面规则中允许哪些模式?

如果使用的是转发页面规则,则可以将这些通配符映射到变量。在转发 URL 中,可以按照从左到右的顺序指定与原始 URL 中的通配符相匹配的 $1、$2,以此类推。

例如,可以将 http://*.example.com/* 转发到 http://$2.example.com/$1.jpg。此规则将与 http://cloud.example.com/flare 相匹配,这最终将转发到 http://flare.example.com/cloud.jpg。

一些有用的提示:

  1. 如果要同时匹配 http 和 https,只需编写 example.com 即可。无需编写 example.com。
  2. 如果要匹配域中的每个页面,则需要编写 example.com/,仅编写 example.com 是不够的。
  3. 请参阅 了解和配置 Cloudflare 页面规则 了解有关页面规则模式的更多详细信息。

6. 配置 SSL(不必要)

:::info Update 2022.09.05:

这一步好像不是必要的,如果以上 5 步设置 www.example.com 的 301 重定向均不成功,可以参考增加这一步设置! :::

以上的配置可以确保 example.com 通过页面规则实现 301 重定向;如果你想要实现 www.example.com 通过页面规则实现 301 重定向,则需要:

  1. 申请 www.example.com 域名的 SSL 证书;
  2. 把 DNS 验证域名的记录添加到 Cloudfare 的 DNS 中;

image.png
image.png
image.png
注意:
image.png

参考资料

  1. nginx实现两个域名之间跳转配置 - SegmentFault 思否
  2. 智能云解析DNS - 通过Nginx实现URL转发 | 百度智能云文档
  3. SEO 的 301 重定向:你需要知道的一切