Почему я сталкиваюсь с ошибкой 404 при попытке открыть субстраницы на GitLab Pages?

Основная страница загружается успешно, и от нее корректно загружаются дочерние страницы. Однако при попытке перезагрузить дочернюю страницу возникает ошибка. <br/><br/> В конфигурации CI: <br/><pre><code class="yaml">pages:
  stage: deploy
  script: 
  - mkdir .public
  - cp -r * .public/
  - mv .public public
  artifacts:
    paths:
      - public
  only:
  - page</code></pre> <br/><br/> При этом используется дефолтная директория для сборки.  Как устранить возникшую проблему с загрузкой дочерних страниц?
  • 11 октября 2024 г. 3:15
Ответы на вопрос 1
Ошибка 404 на GitLab Pages при попытке открыть дочерние страницы, скорее всего, связана с неправильной конфигурацией маршрутов или ссылок в вашем проекте. На GitLab Pages применяется простой HTTP-сервер, который обрабатывает запросы, и если ссылки на дочерние страницы формируются некорректно, то сервер не может найти соответствующие файлы.

Вот несколько возможных причин и решений вашей проблемы:

1. **Проверьте структуру файлов**: Убедитесь, что дочерние страницы действительно существуют в директории `public`. Например, если у вас есть файл `about.html`, убедитесь, что он находится в папке `public`.

2. **Правильные ссылки**: Убедитесь, что ссылки на дочерние страницы сформированы относительно корня вашего сайта. Например, вместо относительных ссылок, используйте абсолютные:
   ```html
   <a href="/about.html">About</a>
   ```
   Если у вас есть вложенные папки, убедитесь, что ссылки на них также правильные:
   ```html
   <a href="/folder/subfolder/page.html">Subfolder Page</a>
   ```

3. **Использование HTML5 History API**: Если вы используете `HTML5 history API` (например, с SPA-фреймворками), нужно обрабатывать маршрутизацию на сервере. GitLab Pages не может обрабатывать маршруты из-за отсутствия серверной логики. Возможно, в этом случае вам потребуется использовать `.htaccess` (если это поддерживается) или предварительно настраивать маршруты в приложении. Но на стандартных GitLab Pages это не поддерживается.

4. **Убедитесь, что страницы не требуют дополнительной обработки**: Если ваши дочерние страницы — это динамически генерируемые страницы (например, через JavaScript-фреймворки), убедитесь, что все необходимые файлы загружаются и доступны в сборке.

5. **Конфигурация `.gitlab-ci.yml`**: Убедитесь, что ваша конфигурация CI/CD действительно создает нужные файлы. Возможно, стоит использовать более простой способ с копированием напрямую без дополнительных директорий (если это возможно):
   ```yaml
   pages:
     stage: deploy
     script:
       - cp -r * public/
     artifacts:
       paths:
         - public
     only:
       - main  # Убедитесь, что это соответствует вашему главному ветвлению
   ```

Попробуйте все вышеупомянутое, и если ошибка останется, предоставьте больше подробностей о том, как структурированы ваши файлы и как вы создаете ссылки на страницы. Это поможет лучше понять проблему.
Похожие вопросы