У меня есть приложение React, работающее на сервере apache / PHP.
Приложение React загружается по домашнему пути. То есть PHP настроен на загрузку index.html по маршруту /, который загружает приложение React.
index.html
// ....
<div id = "react-hook"></div>
<script>
const wrapper = document.getElementById("react-hook");
wrapper ? ReactDOM.render(<BrowserRouter><App /></BrowserRouter>, wrapper) : false;
</script>
(На самом деле я использую веб-пакет, но это его суть)
Я использую react-router для определения некоторых маршрутов:
const Routes = () => (
<div>
<Route exact path = "/" component = {Home} />
<Route path = "/login" component = {Login} />
<Route path = "/test" component = {Test} />
</div>
)
И рендеринг их с некоторыми ссылками ..
<Link to = "/>Home</Link>
<Link to = "/login>Login</Link>
<Link to = "/test>Test</Link>
Это работает нормально, но когда я жестко перезагрузил страницу, загруженный маршрут был определен в сервер.
Чтобы решить эту проблему, я установил правило на сервере для пересылки всех запросов на домашний маршрут /, где находится index.html - таким образом мое приложение для реагирования загружается для всех запросов.
Это ближе к решению моей проблемы, но теперь все жестко загруженные маршруты приводят меня к домашнему маршруту реакции, а не к маршруту, который я пытался перезагрузить.
behavior: /test (hard route) ---> / (soft route)
should be: /test (hard route) ---> /test (soft route)
Как правильно реализовать жесткую перезагрузку для реагирующего приложения?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это зависит от того, какой сервер вы используете. Вы не хотите пересылать все запросы на /. Вы хотите отобразить /index.htmlнезависимо от того, какой запрос вы получите. Если пользователь запрашивает /test, ваш сервер дает им /index.html, но называет это/test. Они не получают ни 404, ни 301. Они получают код состояния 200 для /test, но они получают содержимое /index.html.
Для nginx это что-то вроде try_files $uri index.html.
Для Apache вы можете использовать mod_rewrite, чтобы перезаписать все пути несуществующий (что-то вроде RewriteCond %{REQUEST_FILENAME} !-f при условии, что файл не существует для перезаписи) к /index.html с помощью RewriteRule .* /index.html.
Приложению React требуется только одна и та же точка входа (<App />), а маршрутизатор React при загрузке страницы будет использовать URL-адрес страницы для соответствующей навигации, поэтому все маршруты используют один и тот же index.html для приземления, куда они направляются.
ок я гочя! да, немного неверное мышление с моей стороны. Я использую Apache, поэтому могу сделать это в
.htaccess- единственная загвоздка в том, что я на самом деле не хочу обслуживатьindex.htmlдля запросов все, потому что я хочу использовать этот сервер в качестве API для реагирования, поэтому некоторые маршруты будут конечными точками API. . но я могу записать их в правило перенаправления (/api/*обслуживается через php)