У меня есть угловое приложение с несколькими маршрутами, такими как:
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 (с параметрами представления), только если нет фактического файла, что это должно разрешить?
Используйте отрывок как:
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
файл, если файл не существует. Таким образом, я добавляю простой 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
Решение бедного человека (не использующий mod_rewrite):
ErrorDocument 404 /index.html
В моем случае я создаю .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 и это, хорошо работает
Проверьте эту ссылку: 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>
Я обеспечу, другой детализировал htaccess файл в случае, если Вы должны:
Вот являются моим 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]