La configuration de nginx pour une seule page de site web avec HTML5 pousser état URL
Comment puis-je configurer nginx pour rediriger toutes les URL (pas précédées de /api
ou certains ressource statique par exemple. JS/images) à index.html
? La raison est que je suis en utilisant HTML5 pousser état URL avec une seule page de l'application. Contenu de signification est changé, que l'AJAX ou JS en fonction de l'URL
Ma config nginx ressemble:
server {
listen 2000;
server_name localhost;
location / {
root /labs/Projects/Nodebook/public;
index index.html;
}
location /api/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://localhost:3000/;
proxy_redirect off;
}
}
OriginalL'auteur Jiew Meng | 2012-12-11
Vous devez vous connecter pour publier un commentaire.
Il s'agira de vérifier si le fichier demandé existe et de le retourner. Si le fichier n'existe pas, il sera de retour index.html.
http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files
C'est correct. N'oubliez pas le favicon.ico ou créer une règle pour revenir 404 si favicon.ico est manquant. Ou tout autre fichier dont vous avez besoin pour traiter séparément.
OriginalL'auteur mattes
caches réponse est presque une solution, mais il ne vous donnera pas de 404 pour les fichiers manquants (par exemple, favicon.icône) aschepis souligné.
Nginx va chercher le premier emplacement qui correspond. Afin que nous puissions premier match pour les fichiers (qui donnera 404 si le fichier n'existe pas). Et après avoir mis un emplacement par défaut index.html pour toutes les url.
example.com/users/my.name
, cette solution ne fonctionne pas.D'abord l'emplacement correspondant est un peu ambigu. Un bon guide est digitalocean.com/community/tutorials/... faites défiler jusqu'à l'emplacement correspondant blocs de la partie
que voulez-vous dire? c'est la correspondance de modèle pour <ce>.<ce>, et suppose qu'un point désigne un fichier. Vous pouvez remplacer le modèle de ce qui est raisonnable pour votre contexte.
désolé, mon commentaire n'est pas très clair. Donc, j'ai lu votre réponse avant que je RTFM et ce que j'ai reçu de votre réponse par Nginx va chercher le premier emplacement qui correspond à, c'est qu'il va en bas de la liste et prend le premier il correspond. La priorité est beaucoup plus complexe que cela, il semble bien que.
Je vois, oui, si vous avez d'autres endroits vous devrez peut-être ajuster. Ci-dessus, il traite à la fois en tant que préfixes et choisit la plus celui qui correspond. Donc, si c'est correct, la commande ne devrait pas d'importance. Si vous essayez svp laissez-moi savoir 🙂
OriginalL'auteur j-a
Vous devez ajouter à votre fichier de configuration de nginx:
Dire ensuite que vous utilisez Backbone.js assurez-vous de re-router les non-défini route vers une page 404:
Source:
http://readystate4.com/2012/05/17/nginx-and-apache-rewrite-to-support-html5-pushstate/
vrai @mattes c'était une très mauvaise façon que j'ai trouvée pour résoudre partiellement par le client. Devrait être mieux pris en compte lors de Nginx niveau avec plus de règles pour gérer les cas que vous mentionnez.
OriginalL'auteur albertpeiro