Относительные ссылки на Github-страницах не работают, когда используется пользовательский домен - PullRequest
0 голосов
/ 11 июня 2018

Я использую Github-страницы без Jekyll, просто обнаживаю .md файлы.

Чтобы связать эту .md с какой-либо папкой внутри моего репо, я использую относительные ссылки.

Почему относительные ссылки?Я использовал абсолютные ссылки, такие как https://github.com/USER_NAME/REPO_NAME/blob/master/FOLDER_NAME, но затем я изменил свое имя репо, и все ссылки перестали работать.

Именно поэтому я перешел на относительные ссылки, но затем, когда я проверил, как работает страница подПользовательский домен -> все ссылки перестали работать.

Под словом "остановлено" работает я имею в виду: теперь, когда я захожу на www.CUSTOM_DOMAIN.com/REPO_NAME/FOLDER_NAME, я получаю 404.



РЕДАКТИРОВАТЬ 1:
Когда я пытался отредактировать этот вопрос для этого комментария Я понял, что проблема в другом: - ссылки на файлы работают нормально -но ссылки на папки не работают, т.е. REPO_NAME не добавляется в URI, там должно быть:

www.CUSTOM_DOMAIN.com/REPO_NAME/FOLDER_NAME

, а на самом деле есть:

www.CUSTOM_DOMAIN.com/FOLDER_NAME.

Так что мой репозиторий выглядит так:

REPO_NAME/
├── README.md
├── FOLDER_NAME/
│   ├── FOLDERFILE.md

Так что ссылка в моем README.md (NOK):

[some string for folder](/FOLDER_NAME)
(which is unwrapped by github-pages-engine to)
www.CUSTOM_DOMAIN.com/FOLDER_NAME

Работает нормально, когда я ссылаюсь на файл, например (OK):

[some string for file](/FOLDER_NAME/FOLDERFILE.md)
(which is unwrapped by github-pages-engine to)
www.CUSTOM_DOMAIN.com/REPO_NAME/FOLDER_NAME.html



РЕДАКТИРОВАТЬ 2:
страница, которую я пытаюсь исправить, НЕ является страницей организации / пользователя, поэтому она должна иметь REPO_NAME в пути.



РЕДАКТИРОВАТЬ 3:
Я изменил ссылки, чтобы удалить косую черту, и они по-прежнему не работают.Теперь ссылка в моем README.md (NOK):

[some string for folder](FOLDER_NAME/)
(which is unwrapped by github-pages-engine to)
www.CUSTOM_DOMAIN.com/REPO_NAME/FOLDER_NAME

или (также NOK):

[some string for folder](./FOLDER_NAME/)
(which is unwrapped by github-pages-engine to)
www.CUSTOM_DOMAIN.com/REPO_NAME/FOLDER_NAME

1 Ответ

0 голосов
/ 12 июня 2018

У вас есть две проблемы:

  1. Вы не используете относительные URL.
  2. Вы не учитываете, что корень сервера отличается от настраиваемого домена.

Относительные URL-адреса

Относительный URL-адрес - это путь относительно текущего местоположения.Однако URL-адрес, начинающийся с косой черты, не относится к текущему местоположению.Открывающая косая черта указывает путь от корня сервера.Другими словами, чтобы «нормализовать» URL, просто добавьте домен.

Поэтому, чтобы ссылка была относительно текущего местоположения, она не могла начинаться с косой черты.Если использовать примерную структуру, любые ссылки в файле FOLDERFILE.md будут выглядеть так:

[REPO_NAME](../)          <= step back one directory
[README.md](../README.md) <= step back one directory
[FOLDER_NAME](./)         <= the current directory

И любые ссылки в файле README.md будут выглядеть следующим образом "

[REPO_NAME](./)
[FOLDER_NAME](FOLDER_NAME/)
[FOLDERFILE.md](FOLDER_NAME/FOLDERFILE.md)

Если это поможет, вы можете запустить все URL с текущего каталога (./). Хотя это и не нужно, некоторые люди находят его более читабельным. В этом случае файл README.md будет выглядеть следующим образом "

[REPO_NAME](./)
[FOLDER_NAME](./FOLDER_NAME/)
[FOLDERFILE.md](./FOLDER_NAME/FOLDERFILE.md)

Корень сервера

Важно понимать разницу между корнем сервера и корнем вашего сайта.Когда они одинаковы, абсолютные ссылки будут работать нормально.Однако, когда они различаются, между ними будут работать только истинные относительные ссылки.

Когда вы настраиваете страницы GitHub с использованием домена, предоставленного GitHub, ваш сайт размещается на https://USERNAME.github.io/REPO_NAME.В этом случае корневой каталог сервера находится на USERNAME.github.io/, и именно на это указывает /.Однако корень вашего сайта находится в подкаталоге /REPO_NAME.Поэтому, чтобы абсолютные URL-адреса работали, в них должно быть указано /REPO_NAME/.

Однако при настройке пользовательского домена корень сервера и корень сайта находятся в одном месте: https://example.com/.Подкаталога REPO_NAME нет.Содержимое REPO_NAME находится по адресу /.

. В качестве иллюстрации следующие URL-адреса указывают на одно и то же местоположение в зависимости от того, используете ли вы домен GitHub или пользовательский домен.

GitHub Domain                        | Custom Domain
------------------------------------ | --------------------------
/REPO_NAME/                          | /
/REPO_NAME/README.md                 | /README.md
/REPO_NAME/FOLDER_NAME/              | /FOLDER_NAME/
/REPO_NAME/FOLDER_NAME/FOLDERFILE.md | /FOLDER_NAME/FOLDERFILE.md

И это различие заключается в том, что вам нужно использовать истинные относительные URL - URL, которые не начинаются с /.

...