Переадресация htaccess для Угловых маршрутов

У меня есть угловое приложение с несколькими маршрутами, например:

site.com/ site.com/page site.com/page/4 

Используя режим маршрутизации html5 в угловом режиме, они корректно разрешаются, когда вы нажимаете на них ссылки из приложения, но, конечно же, 404 ошибки при интенсивном обновлении. Чтобы исправить это, я попытался выполнить базовую переработку htaccess.

 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_METHOD} !OPTIONS RewriteRule ^(.*)$ index.html [L] 

Это работает для угловых запросов, однако, когда я пытаюсь загрузить скрипты или сделать ajax-вызовы в моем домене, например:

  

Этот скрипт не загружается – его запрос перенаправляется, и он пытается загрузить страницу index.html, поскольку .htaccess считает, что он должен перенаправить запрос – не зная, что этот файл существует, и он должен загрузить файл вместо перенаправления.

Есть ли способ, чтобы htaccess перенаправлял запрос index.html (с параметрами представления) только в том случае, если нет фактического файла, который он должен решить?

    Используйте fragment, например:

     RewriteEngine on RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^(.*) /index.html [NC,L] 

    Это пропустит фактический ресурс, если он есть, и index.html для всех маршрутов AngularJS.

    Существует проблема, если приложение запрашивает файл шаблона directive , но файл отсутствует . В некоторых случаях приложение вызвало несколько файлов сценариев в index.html .

    мы должны отправить 404 ответ вместо файла index.html если файл не существует. Поэтому я добавляю простой шаблон регулярного выражения, чтобы идентифицировать отсутствующий запрос файла.

     RewriteEngine On # If an existing asset or directory is requested go to it as it is RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR] RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d RewriteRule ^ - [L] # If the requested pattern is file and file doesn't exist, send 404 RewriteCond %{REQUEST_URI} ^(\/[a-z_\-\s0-9\.]+)+\.[a-zA-Z]{2,4}$ RewriteRule ^ - [L,R=404] # otherwise use history router RewriteRule ^ /index.html 

    Решение бедного человека (не использующее mod_rewrite):

     ErrorDocument 404 /index.html 

    Я предоставил еще один подробный файл htaccess, если вам нужно:

    • Учитывайте файл baseUrl и индекс по умолчанию
    • Удалите ведущую косую черту для управления: params

    Вот мой htaccess, очень близкий, но более конкретный:

     DirectoryIndex index.html RewriteEngine on RewriteBase /subDir RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^(.*) index.html [NC,L] 

    Перейдите по этой ссылке: https://stackoverflow.com/a/49455101/5899936 Создайте файл .htaccess в корневой папке и запишите это в .htaccess

       RewriteEngine On RewriteBase / RewriteRule ^index\.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.html [L]  

    В моем случае я создаю файл .htaccess, как показано ниже.

     RewriteEngine on RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^(.*) ./index.html [NC,L] 

    только что добавлен . перед /index.html и добавьте этот файл в свой домен, например https://example.com/subfolder, и он отлично работает

    Interesting Posts

    Как преобразовать неглубокий клон Git в полный клон?

    Карта Java со значениями, ограниченными параметром типа ключа

    Не удается удалить Avast Free Antivirus

    Можем ли мы изменить значение объекта, определенного с помощью const через указатели?

    Программно перемещаться с помощью реагирующего маршрутизатора

    Последовательные sys_write syscalls не работают должным образом, ошибка NASM на OS X?

    AngularJS: Как смотреть служебные переменные?

    Как я могу запускать однострочные приложения несколько раз на одном компьютере без VMWare?

    Проблема с wav в Java

    Как загрузить / ссылаться на файл как экземпляр файла из пути к classам

    Как найти причину ошибки «double free» malloc?

    Android. Можно ли программно установить дистрибутив install?

    FCM (Firebase Cloud Messaging) Отправить на несколько устройств

    Проблемы с запуском ядер CUDA из статического кода инициализации

    Как узнать, какой процесс блокирует файл с помощью .NET?

    Давайте будем гением компьютера.