同じ種類の問題を探していました。上記の推奨ソリューションを組み合わせて使用しました。
最初に、私は複数のフォルダーを持つs3バケットを持っています。各フォルダーは、react / redux Webサイトを表します。キャッシュの無効化にもcloudfrontを使用しています。
そのため、404をサポートするためにルーティングルールを使用し、それらをハッシュ構成にリダイレクトする必要がありました。
<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>
私のjsコードではbaseName、react-routerの構成で処理する必要がありました。まず第一に、あなたの依存関係が相互運用可能であることを確認してください、私history==4.0.0はと互換性がなくインストールしましたreact-router==3.0.1。
私の依存関係は:
- "履歴": "3.2.0"、
- "反応する": "15.4.1"、
- "react-redux": "4.4.6"、
- "react-router": "3.0.1"、
- "react-router-redux": "4.0.7"、
history.js履歴を読み込むためのファイルを作成しました。
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;
このコードにより、サーバーから送信された404をハッシュで処理し、ルートを読み込むためにそれらを履歴で置き換えることができます。
これで、このファイルを使用してストアとルートファイルを構成できます。
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;
それが役に立てば幸い。この構成では、ルーティング経由でjavascriptを非同期にロードするためにreduxインジェクターと自作のsagasインジェクターを使用していることに気づくでしょう。これらの行を気にしないでください。