Настройки Apache для SPA с использованием истории HTML5-маршрутизации - PullRequest
0 голосов
/ 27 февраля 2019

Моя команда недавно обновила нашу унаследованную реализацию маршрутизации SPA с хеш-маршрутизации до HTML5 History.Теперь нам нужно обновить настройки Apache, чтобы SPA мог обрабатывать «чистые URL».Это достаточно просто с помощью директивы FallbackResource:

FallbackResource /index.html

. Он загружает SPA для всех запросов файлов и каталогов, которые фактически не отображаются в файл / каталог на диске.

Однако мне бы все же хотелось, чтобы файлы, которые на самом деле не существовали, загружали страницу 404.html наших серверов и отвечали статусом 404, а не «возвращались» к SPAs index.html.

Как настроить Apache так, чтобы он обращался только к странице index.html для каталогов, которые не существуют (/some/route), но для файловых запросов (/somefile.css), которые не существуют, отображать404 статус и страница?

Я пробовал различные RewriteCond/RewriteRule комбинации без удачи.

Заранее спасибо!

1 Ответ

0 голосов
/ 13 марта 2019

Поскольку вы хотите иметь возможность предоставлять один тип ответа для каталогов или пути, которые выглядят как каталоги (например, /financing/terms), и другой тип ответа для файлов, то я считаю, что директива Files это то, что вы ищете.

Я создал ветку в репозитории GitHub , которая имеет образ Docker с Apache и пример одностраничного приложения из Ember для демонстрации решения.Чтобы проверить это, клонируйте репо и извлеките ветку fallbackresource.Оттуда, если у вас установлен Docker, следуйте инструкциям в README.Сервер запустится через порт 80, поэтому вы можете посетить http://localhost.Ниже приведен скриншот работы SPA.

localhost/rentals shown in Chrome

Localhost перенаправляет на http://localhost/rentals, как только приложение на одной странице запускается и перенаправляет.Обратите внимание на 404 во вкладке сети - есть ссылка на несуществующий файл JS, который выбрасывает 404 вместо возврата к файлу index.html.

Это работает из-за директивы Files в файле конфигурации (см. Ниже и в исходный код для этой ветви ).

# Map all SPA-looking routes to our single page app index file
<Directory ~ "^/[\w+\d+-]+">
  FallbackResource /index.html
</Directory>

# Requests for files should return a real 404 and not fallback to the index.html page, though
<Files ~ "\.(js|css|gif|jpe?g|png)$">
  FallbackResource disabled
  ErrorDocument 404 "File not found"
</Files>

Директива Directory использует регулярное выражение для сопоставления со словами, цифрами и дефисами слов, чтобы маршруты, которые вы, вероятно, хотели сопоставить с маршрутами SPA, должны были возвращаться к файлу index.html.Однако запросы отдельных типов файлов не являются откатными, поскольку директива Files отключает свойство FallbackResource.

Объединение этих двух директив в конфигурации Apache должно дать вам поведение, за которое вы стреляете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...