htaccess перенаправляют для Угловых маршрутов

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

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

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

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

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

<script src="/app/programs/script.js"></script>

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

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

62
задан 30 March 2014 в 06:18

6 ответов

Используйте отрывок как:

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.

129
ответ дан 31 October 2019 в 13:27

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

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

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
20
ответ дан 31 October 2019 в 13:27

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

ErrorDocument 404 /index.html
5
ответ дан 31 October 2019 в 13:27

В моем случае я создаю .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 и это, хорошо работает

3
ответ дан 31 October 2019 в 13:27

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

 <IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.html [L]
</IfModule>
2
ответ дан 31 October 2019 в 13:27

Я обеспечу, другой детализировал htaccess файл в случае, если Вы должны:

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

Вот являются моим 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]
0
ответ дан 31 October 2019 в 13:27

Другие вопросы по тегам:

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