Как перенаправить старый адрес сайта Netlify + Jekyll на новый адрес?

Я создал сайт 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.


person KajMagnus    schedule 22.01.2018    source источник
comment
Каково содержание _redirects?   -  person marcanuy    schedule 22.01.2018
comment
@marcanuy Это второй самый верхний фрагмент кода выше, тот, который начинается с # Redirect domain aliases ... (я отредактировал вопрос, чтобы сделать его более понятным).   -  person KajMagnus    schedule 22.01.2018
comment
ВНИМАНИЕ: include: ["_redirects"] переопределяет настройку по умолчанию include: [".htaccess"]. Чтобы убедиться, что .htaccess также включен в сборку Jekyll, используйте include: [".htaccess", "_redirects"]   -  person ashmaroli    schedule 24.01.2018


Ответы (1)


Отказ от ответственности: я работаю в Netlify

В нашей документации есть специальный раздел по этому поводу: https://www.netlify.com/docs/redirects/#handling-hostnames-and-protocols-Differently

... и ваш фрагмент должен работать, поскольку он следует этим соглашениям.

Единственными предпосылками для выполнения этой работы являются:

1) что ваш сайт настроен в нашем пользовательском интерфейсе так, чтобы он отвечал на ВСЕ эти имена, поэтому:

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

2) и что все имена настроены одинаково в DNS (CNAME на yournetlifysitename.netlify.com)

Единственный способ добавить «дополнительные» имена в вашу конфигурацию Netlify — это псевдонимы домена, которые настраиваются на панели настроек домена рядом с вашим «основным» личным доменом.

Поскольку ваши _redirects выглядят правильно для меня, если у вас есть предварительные условия, настроенные так, как было предложено, наиболее вероятным режимом отказа является то, что ваши перенаправления не применяются по какой-то причине (обычно - они не были развернуты, потому что они не не существует в файле с именем _redirects в вашей папке публикации после сборки), но ваш include в конфигурации jekyll должен позволять этому файлу сохраняться в этом месте. Эта конфигурация jekyll является «правильным» способом сделать это, но для других генераторов сайтов мы иногда советуем людям копировать перенаправления на место после сборки: jekyll build && 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/

Итак, я думаю, следующий вопрос: как вы тестируете?

person fool    schedule 23.01.2018
comment
Привет! Спасибо за помощь. Да, действительно, jekyll-comments.demo.ed.community правильно перенаправляется (раньше не замечал). Но https://jekyll.demo.talkyard.io/ нет. Как в браузере, так и с помощью cURL jekyll-comments.demo.ed.community перенаправляется. Но https://jekyll.demo.talkyard.io/ приводит к статусу 200 OK. Мне интересно, может быть, есть какая-то ошибка в коде перенаправления, если целевой сайт находится в том же домене 2-го уровня? jekyll.demo.talkyard.io и jekyll-demo.talkyard.io оба на talkyard.io. - person KajMagnus; 24.01.2018
comment
Я изменил содержимое файла _redirects, чтобы jekyll.demo был перенаправлен со статусом 301 (вместо статуса 302). Не имел никакого эффекта. (Я обновил вопрос, чтобы показать новое содержание.) - person KajMagnus; 24.01.2018
comment
Спасибо, что показали, как я могу загрузить содержимое в папку развертывания. Я не знал об этом. - person KajMagnus; 24.01.2018
comment
Ага, я вижу там какое-то некорректное поведение — я свяжусь с вами в службу поддержки, чтобы мы могли попытаться отследить это. По сути, ваша конфигурация верна, и, как ни странно, перенаправление jekyll.demo.talkyard.io работает, но https нет. - person fool; 24.01.2018