Sedang mencari jenis masalah yang sama. Saya akhirnya menggunakan campuran solusi yang disarankan yang dijelaskan di atas.
Pertama, saya memiliki ember s3 dengan beberapa folder, setiap folder mewakili situs web react / redux. Saya juga menggunakan cloudfront untuk pembatalan cache.
Jadi saya harus menggunakan Aturan Routing untuk mendukung 404 dan mengarahkan mereka ke konfigurasi hash:
<RoutingRules>
<RoutingRule>
<Condition>
<KeyPrefixEquals>website1/</KeyPrefixEquals>
<HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect>
<Protocol>https</Protocol>
<HostName>my.host.com</HostName>
<ReplaceKeyPrefixWith>website1#</ReplaceKeyPrefixWith>
</Redirect>
</RoutingRule>
<RoutingRule>
<Condition>
<KeyPrefixEquals>website2/</KeyPrefixEquals>
<HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect>
<Protocol>https</Protocol>
<HostName>my.host.com</HostName>
<ReplaceKeyPrefixWith>website2#</ReplaceKeyPrefixWith>
</Redirect>
</RoutingRule>
<RoutingRule>
<Condition>
<KeyPrefixEquals>website3/</KeyPrefixEquals>
<HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect>
<Protocol>https</Protocol>
<HostName>my.host.com</HostName>
<ReplaceKeyPrefixWith>website3#</ReplaceKeyPrefixWith>
</Redirect>
</RoutingRule>
</RoutingRules>
Dalam kode js saya, saya harus menanganinya dengan baseName
konfigurasi untuk react-router. Pertama-tama, pastikan dependensi Anda saling beroperasi, saya telah menginstal history==4.0.0
yang tidak kompatibel dengan react-router==3.0.1
.
Ketergantungan saya adalah:
- "history": "3.2.0",
- "reaksi": "15.4.1",
- "react-redux": "4.4.6",
- "react-router": "3.0.1",
- "react-router-redux": "4.0.7",
Saya telah membuat history.js
file untuk memuat riwayat:
import {useRouterHistory} from 'react-router';
import createBrowserHistory from 'history/lib/createBrowserHistory';
export const browserHistory = useRouterHistory(createBrowserHistory)({
basename: '/website1/',
});
browserHistory.listen((location) => {
const path = (/#(.*)$/.exec(location.hash) || [])[1];
if (path) {
browserHistory.replace(path);
}
});
export default browserHistory;
Potongan kode ini memungkinkan untuk menangani 404 yang dikirim oleh server dengan hash, dan menggantinya dalam sejarah untuk memuat rute kami.
Anda sekarang dapat menggunakan file ini untuk mengkonfigurasi toko Anda dan file Root Anda.
import {routerMiddleware} from 'react-router-redux';
import {applyMiddleware, compose} from 'redux';
import rootSaga from '../sagas';
import rootReducer from '../reducers';
import {createInjectSagasStore, sagaMiddleware} from './redux-sagas-injector';
import {browserHistory} from '../history';
export default function configureStore(initialState) {
const enhancers = [
applyMiddleware(
sagaMiddleware,
routerMiddleware(browserHistory),
)];
return createInjectSagasStore(rootReducer, rootSaga, initialState, compose(...enhancers));
}
import React, {PropTypes} from 'react';
import {Provider} from 'react-redux';
import {Router} from 'react-router';
import {syncHistoryWithStore} from 'react-router-redux';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import getMuiTheme from 'material-ui/styles/getMuiTheme';
import variables from '!!sass-variable-loader!../../../css/variables/variables.prod.scss';
import routesFactory from '../routes';
import {browserHistory} from '../history';
const muiTheme = getMuiTheme({
palette: {
primary1Color: variables.baseColor,
},
});
const Root = ({store}) => {
const history = syncHistoryWithStore(browserHistory, store);
const routes = routesFactory(store);
return (
<Provider {...{store}}>
<MuiThemeProvider muiTheme={muiTheme}>
<Router {...{history, routes}} />
</MuiThemeProvider>
</Provider>
);
};
Root.propTypes = {
store: PropTypes.shape({}).isRequired,
};
export default Root;
Semoga ini bisa membantu. Anda akan melihat dengan konfigurasi ini saya menggunakan injektor redux dan injektor saga homebrew untuk memuat javascript secara asinkronisasi melalui perutean. Jangan pedulikan garis tesis ini.