En utilisant nginx, je souhaite conserver l’URL, mais charge en fait la même page, quoi qu’il en soit. Je vais utiliser l'URL avec History.getState()
pour router les demandes dans mon application javascript. Il semble que cela devrait être une chose simple à faire?
location / {
rewrite (.*) base.html break;
}
fonctionne, mais redirige l'URL? J'ai toujours besoin de l'URL, je veux juste utiliser toujours la même page.
Je pense que cela va le faire pour vous:
location / {
try_files /base.html =404;
}
En utilisant seulement try_files
n'a pas fonctionné pour moi - cela a provoqué une erreur de réécriture ou de cycle de redirection interne dans mes journaux.
Les documents Nginx avaient quelques détails supplémentaires:
http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files
J'ai donc utilisé les éléments suivants:
root /var/www/mysite;
location / {
try_files $uri /base.html;
}
location = /base.html {
expires 30s;
}
Votre réécriture originale devrait presque fonctionner. Je ne sais pas pourquoi cela redirigerait, mais je pense que ce que vous voulez vraiment, c'est juste
rewrite ^ /base.html break;
Vous devriez pouvoir mettre cela dans un emplacement ou directement sur le serveur.
Cela a fonctionné pour moi:
location / {
alias /path/to/my/indexfile/;
try_files $uri /index.html;
}
Cela m'a permis de créer une URL fourre-tout pour une application javascript d'une seule page. Tous les fichiers statiques tels que css, polices et javascript construits par npm run build
sera trouvé s’ils se trouvent dans le même répertoire que index.html
.
Si les fichiers statiques étaient dans un autre répertoire, pour une raison quelconque, vous auriez également besoin de quelque chose comme:
# Static pages generated by "npm run build"
location ~ ^/css/|^/fonts/|^/semantic/|^/static/ {
alias /path/to/my/staticfiles/;
}
La bonne façon serait:
location / {
rewrite (.*) base.html last;
}
En utilisant last
, nginx trouvera un nouveau bloc location
approprié en fonction du résultat de la réécriture.
try_files
est également une approche parfaitement valide de ce problème.
Cela a fonctionné pour moi:
location / {
try_files $uri $uri/ /base.html;
}