Поскольку вы хотите иметь возможность предоставлять один тип ответа для каталогов или пути, которые выглядят как каталоги (например, /financing/terms
), и другой тип ответа для файлов, то я считаю, что директива Files это то, что вы ищете.
Я создал ветку в репозитории GitHub , которая имеет образ Docker с Apache и пример одностраничного приложения из Ember для демонстрации решения.Чтобы проверить это, клонируйте репо и извлеките ветку fallbackresource
.Оттуда, если у вас установлен Docker, следуйте инструкциям в README.Сервер запустится через порт 80, поэтому вы можете посетить http://localhost
.Ниже приведен скриншот работы SPA.
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 должно дать вам поведение, за которое вы стреляете.