[SOLVED] Get URL for router from browser

Может я неправильно делаю редирект?
После редиректа меняется 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

2 Likes

Долго я искал решение. Сработало Ваше. Очень признателен!