Перенаправление всех маршрутов без полномочий root на index.html в Amazon Linux 2 и Apache.

Экземпляр Amazon Linux 2 использует Apache для размещения приложения Angular 7. Приложение Angular 7 включает в себя не только index.html, но также несколько файлов .js и подкаталог с именем assets.

Какой конкретный синтаксис мне нужно использовать, чтобы запросы к Apache для всех неуказанных маршрутов перенаправлялись на index.html, расположенный в DocumentRoot? Обратите внимание, что необходимый синтаксис также должен позволять всем файлам .js и содержимому каталога assets обслуживаться в качестве вторичных запросов при загрузке клиентских браузеров index.html.

Например, если удаленный веб-браузер запрашивает mydomain.com/randomCharacters, я хочу, чтобы Apache возвращал index.html так же, как Apache ответил бы на запрос mydomain.com с index.html. Затем index.html должен иметь доступ к файлам .js и содержимому подкаталога assets.

(В данном случае DocumentRoot — это каталог с именем /var/www/mydomain.com/public_html.Кроме того, каталог /var/www/mydomain.com/public_html содержит 1. index.html, 2. несколько файлов .js и 3. assets подкаталог, содержащий такие вещи, как изображения и т. д.)

Я хотел бы использовать RedirectMatch внутри блока VirtualHost, чтобы сохранить конфигурацию как можно более чистой. . Вот что я имею в виду. Как нужно изменить следующее?


    ServerName www.mydomain.com
    ServerAlias mydomain.com
    DocumentRoot /var/www/mydomain.com/public_html
    ErrorLog /var/www/mydomain.com/error.log
    CustomLog /var/www/mydomain.com/requests.log combined
    RedirectMatch 302 ^/(?!index.html$).+ http://mydomain.com  


Судебно-медицинский анализ результатов:

При выполнении описанного выше действия с открытой вкладкой «Сеть» в инструментах разработчика Firefox и отправкой запроса на http://mydomain.com, в то время как RedirectMatch 302 ^/(?!index.html$).+ http://mydomain.com находится в VirtualHost, в результате все запросы к / показано, что они дали 304 ответов, в то время как все запросы к именованным файлам, таким как скрипты и таблицы стилей, дали 302 ответов.

Кроме того, когда я просматриваю исходный код страницы html для того же запроса, я вижу, что содержимое index.html действительно было обработано правильно, но браузер оставался пустым, потому что код в index.html не смог получить доступ к файлам .js или содержимому подкаталога assets.

Итак, проблема в том, что RedirectMatch 302 ^/(?!index.html$).+ http://mydomain.com необходимо переписать, чтобы разрешить .js и содержимое подкаталога assets. Какой конкретный синтаксис требуется для решения этой проблемы, чтобы Apache мог успешно серверировать приложение Angular 7 независимо от того, какая строка символов добавляется после http://mydomain.com?

0
07.05.2019, 00:31
1 ответ

Вы можете использовать подобное RewriteRuleв контексте VirtualHost:

RewriteEngine On
# if not a regular file
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
# and not a directory
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
# then rewrite to index.html
RewriteRule ^.*$ /index.html [L]

Если вы хотите, чтобы ваша конфигурация была «как можно более чистой», тогда не делайте ничего подобного и позвольте Apache вернуть HTTP 404, как и должно быть.

1
28.01.2020, 02:40

Теги

Похожие вопросы