Mon application de réaction fonctionne parfaitement sur mon serveur de développement local, mais cela ne fonctionnait pas lorsque je vidais mes fichiers prêts pour la production directement dans le répertoire htdocs d'Apache:
Voici ce que j'ai
/var/www/index.html
/var/www/bundle.js
et j'ai
DocumentRoot /var/www
dans /etc/Apache2/sites-available/000-default.conf
Le fait est que
1). quand j'accède à http: //...com/ qui m'a dirigé vers la page de connexion
2). Après avoir cliqué sur un lien
<Link to="main"><button>Log In</button></Link>
le contenu dans le champ d'emplacement du navigateur devient:
http://...com/main
3) Maintenant, si je recharge cette URL ( http: //...com/main ), je reçois
The requested URL /main was not found on this server
Ma montée en réaction:
<Router history={browserHistory }>
<Route path="/" component={TopContainer}>
<IndexRoute component={Login} />
<Route path='main' component={MainContainer} />
</Route>
</Router>
Quoi d'autre me manque dans la configuration Apache?
merci
Modifiez la configuration VirtualHost (généralement trouvée dans /etc/httpd/conf.d\vhosts.conf
) en ajoutant les lignes Rewrite * suivantes:
<VirtualHost *:8080>
ServerName example.com
DocumentRoot /var/www/httpd/example.com
<Directory "/var/www/httpd/example.com">
...
RewriteEngine on
# Don't rewrite files or directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# Rewrite everything else to index.html to allow html5 state links
RewriteRule ^ index.html [L]
</Directory>
</VirtualHost>
Cela indique à Apache de servir tous les fichiers existants, mais s'ils n'existent pas, il suffit de servir /index.html
plutôt qu'un 404: not found
.
Référence Apache: Configuration des hôtes virtuels Apache
react-router
Historique de référence: Configuration de votre serveur
Réponse complète volée avec gratitude à ici
On dirait que ce lien ( https://gkedge.gitbooks.io/react-router-in-the-real/content/Apache.html ) est exactement ce dont vous avez besoin ...
Ce morceau de configuration est utile pour les SPA:
Cela indique à Apache de servir tous les fichiers existants, mais s'ils n'existent pas, il suffit de servir /index.html plutôt que 404: non trouvé
J'espère que cela résoudra votre problème!
La solution ci-dessus fonctionne pour Ubuntu aussi mais je me suis battu un peu avec elle alors voici les étapes nécessaires pour le faire fonctionner.
L'emplacement du fichier où vous devez placer la configuration susmentionnée est sous
/etc/Apache2/sites-enabled
la valeur par défaut est
/etc/Apache2/sites-enabled/000-default.conf
Ensuite, vous devez vous assurer que RewriteEngine est en cours d'exécution (sinon, vous obtiendrez une erreur lors du redémarrage du serveur Apache).
Sudo a2enmod rewrite
Enfin, redémarrez le serveur Apache
Sudo /etc/init.d/Apache2 restart
Maintenant, ça devrait marcher.
Lorsque vous utilisez la configuration par défaut (la racine du site Web se trouve sous /var/www/html
), il vous suffit de placer
<Directory "/var/www/html">
RewriteEngine on
# Don't rewrite files or directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# Rewrite everything else to index.html to allow html5 state links
RewriteRule ^ index.html [L]
</Directory>
au fichier mentionné ci-dessus sous <VirtualHost ...>