【问题标题】:How do I redirect an old Netlify + Jekyll site address, to the new address?如何将旧的 Netlify + Jekyll 站点地址重定向到新地址?
【发布时间】:2018-01-22 10:09:52
【问题描述】:

我创建了一个 Jekyll 站点,托管在 Netlify,地址为 old.address.com。现在我想重定向到new.address.com。但是 Netlify 文档似乎不起作用,或者我不理解这些文档。这就是我所做的:

我添加了 _config.yml:(因为 Netlify 说 Jekyll 排除了 '_...' 文件)

include:
  - _redirects

我添加了一个_redirects 文件。我只是将 Netlify 生成的指令复制粘贴到该文件中,这是内容:

# Redirect domain aliases to primary domain
https://jekyll-comments.demo.ed.community/* https://jekyll-demo.talkyard.io/:splat 301!
http://jekyll-comments.demo.ed.community/* https://jekyll-demo.talkyard.io/:splat 301!
https://jekyll.demo.talkyard.io/* https://jekyll-demo.talkyard.io/:splat 301!
http://jekyll.demo.talkyard.io/* https://jekyll-demo.talkyard.io/:splat 301!

这没有任何效果。 有什么问题/我做错了什么?

目录如下所示:

$ ls -1
404.html
about.md
_config.yml
Gemfile
_includes
index.md
_layouts
_posts
_redirects     <—— added as per Netlify's instructions
_sass
_site

$ ls -1 _posts/
2018-01-01-like-about-jekyll.markdown
2018-01-02-installation-instructions.markdown
2018-01-02-kind-creatures.markdown

配置文件只是默认的:

title: ...
email: ...
baseurl: "" # the subpath of your site, e.g. /blog
url: "" # the base hostname & protocol for your site, e.g. http://example.com
twitter_username: ...
github_username:  ...

# Build settings
markdown: kramdown
theme: minima
plugins:
  - jekyll-feed

talkyard_comments_server_url: ...

include:
  - _redirects

请注意,虽然上面有相当多的细节,都是各种默认的东西。所以它不是特定于我的问题。它应该适用于所有新的 Jekyll 网站。

【问题讨论】:

  • _redirects的内容是什么?
  • @marcanuy 这是上面第二个最上面的代码 sn-p,以# Redirect domain aliases ... 开头的那个(我编辑了这个问题以使其更清楚一点)。
  • 注意: include: ["_redirects"] 将覆盖默认设置 include: [".htaccess"]。要确保 .htaccess 也包含在 Jekyll 构建中,请使用 include: [".htaccess", "_redirects"]

标签: jekyll netlify


【解决方案1】:

免责声明:我为 Netlify 工作

我们的文档中有专门的部分:https://www.netlify.com/docs/redirects/#handling-hostnames-and-protocols-differently

...您的 sn-p 应该可以工作,因为它遵循这些约定。

完成这项工作的唯一先决条件是:

1) 您已在我们的 UI 中配置您的网站以回答所有这些名称 - 所以:

jekyll-comments.demo.ed.community
jekyll-demo.talkyard.io
jekyll.demo.talkyard.io

2) 并且所有名称在 DNS 中设置相同(CNAME 到 yournetlifysitename.netlify.com)

向您的 Netlify 配置添加“额外”名称的唯一方法是作为域别名,这些别名在“主”自定义域旁边的域设置面板中进行配置。

由于您的 _redirects 在我看来是正确的,如果您按照建议配置了先决条件,最可能的失败模式是您最终没有因为某种原因实际应用重定向(通常 - 他们没有被部署因为它们不存在于构建后发布文件夹中名为 _redirects 的文件中),但 jekyll 配置中的 include 应该允许该文件保留在该位置。 jekyll 配置是“正确”的方式,但对于其他站点生成器,我们有时建议人们在构建后将重定向复制到适当的位置:jekyll build &amp;&amp; cp netlify_redirects.txt _site/_redirects

您可以从任何成功的部署日志页面下载部署中的任何文件,以通过这个小图标检查它们的“最终状态”:

快速查看您的站点配置,它们似乎已部署并正常工作:

$ curl -v https://jekyll-comments.demo.ed.community/ -o /dev/null
* Connected to jekyll-comments.demo.ed.community (35.199.180.1) port 443 (#0)
[...]
< HTTP/1.1 301 Moved Permanently
[...]
< Location: https://jekyll-demo.talkyard.io/

所以我猜下一个问题是……你是如何测试的?

【讨论】:

  • 嗨!谢谢您的帮助。确实,jekyll-comments.demo.ed.community 已正确重定向(我之前没有注意到)。但https://jekyll.demo.talkyard.io/ 不是。在浏览器和 cURL 中,jekyll-comments.demo.ed.community 都会被重定向。但是https://jekyll.demo.talkyard.io/ 导致状态 200 OK。我想知道重定向代码中是否存在一些错误,如果目标站点位于同一个二级域上? jekyll.demo.talkyard.iojekyll-demo.talkyard.io 都在 talkyard.io
  • 我更改了 _redirects 文件内容,因此 jekyll.demo 是状态 301 重定向(而不是状态 302)。没有任何效果。 (我更新了问题以显示新内容。)
  • 感谢您展示如何下载部署文件夹中的内容。我不知道。
  • 是的 - 我可以看到那里有一些错误的行为 - 我会在帮助台上联系你,以便我们尝试追踪它。本质上,您的配置是正确的,奇怪的是 jekyll.demo.talkyard.io 重定向确实有效 - 但 https 没有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-22
  • 2018-01-26
  • 2012-12-23
  • 1970-01-01
  • 2017-09-25
  • 2012-05-22
  • 1970-01-01
相关资源
最近更新 更多