Может я неправильно делаю редирект?
После редиректа меняется pushState в строке браузера, но не работает роутинг - всё время первая страница. Как мне достучаться от адресной строки браузера до роутинга?
Проблема как я вижу на сервере. Вы сделали отдачу index.html на любой запрос. Чтобы роутер не пытался загрузить, сервер отдает index.html
хорошо. Я буду думать как это реализовать. Это получается нужно делать свои маршруты на сервере…
А как такая в принципе нужная штука делается “из коробки”? Я так понял есть возможность отображения пути в строке браузера, но как получить обратную возможность - роутинг по указанному в строке пути. Может есть примеры?
ну я так и сделал, выходит это ошибочно? Хотя, по идее, я передаю управление app.js, он смотрит app.views.main.router.currentRoute.path или window.location.pathname и запускает app.view.main.router.navigate(полученный путь), пытаясь загрузить страницу с URL, назначенным этому пути в routes.js. PushState пишет новый путь. Но тут опять срабатывает редирект, это замкнутый круг.
Выходит мне нужен редирект только при команде из строки браузера, а при программном переходе через роутер - нет.
К томуже при редиректе теряется url и app.js уже получает начальный путь - ‘/’
Все правильно, есть такой роут:
path: '/about/',
componentUrl: './pages/about.html',
- Когда мы обращаемся
website.com/about/
сервер должен отдатьindex.html
- Когда мы обращаемся
website.com/pages/about.html
сервер должен отдать/pages/about.html
Так если редиректить, то при редиректе теряется url и app.js уже получает начальный путь - ‘/’
а если отдать сразу /pages/about.html, не подключатся css и js
Что значит редиректить?
Редиректы тут никакие не нужны (на стороне клиента)
в .htaccess я перевожу запрос на index.html, это я и называю редиректить
на сервере
Ну нужно делать как я показал, он не должен всё редиректить. То что грузится роутером не нужно. Если все страницы (html) лежат в папке, то можно настроить что если запрос к этой папке то отдавать как есть
вот я так и пишу на сервере:
Redirect 301 /about/ https://website.com/index.html
дальше управление переходит к app.js. так? Он смотрит путь в браузере, а там то уже рут! Он не знает что нужно запустить about. Вот я и спрашиваю, как при редиректе передать путь для правильного дальнейшего запуска роутера
Тут верно.
А тут
Не надо
- Когда мы обращаемся
website.com/about/
сервер должен отдатьindex.html
вот я так и пишу на сервере:
Redirect 301 /about/ https://website.com/index.html
дальше управление переходит к app.js. так? Он смотрит путь в браузере, а там то уже рут! Он не знает что нужно запустить about. Вот я и спрашиваю, как при редиректе передать путь для правильного дальнейшего запуска роутера
Дальше роутер всё сделает сам. Он увидит в браузере /about/, найдет нужный роут и загрузит
I found the correct setting .htaccess !! So it works:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ ./index.html
N.B. the routes.js requires an absolute file path
Долго я искал решение. Сработало Ваше. Очень признателен!