nginx : règle de réécriture pour supprimer /index.html à partir de l' $request_uri
J'ai vu quelques façons de réécrire le $request_uri
et ajouter le index.html
lorsque ce fichier existe dans le système de fichiers, comme suit:
if (-f $request_filename/index.html) {
rewrite (.*) $1/index.html break;
}
mais je me demandais si le contraire est possible:
c'est à dire quand quelqu'un demande http://example.com/index.html
, ils sont redirigés vers http://example.com
Parce que la nginx regexp perl compatible, j'ai essayé quelque chose comme ceci:
if ( $request_uri ~* "index\.html$" ) {
set $new_uri $request_uri ~* s/index\.html//
rewrite $1 permanent;
}
mais c'était surtout une conjecture, est-il une bonne documentation décrivant les modrewrite pour nginx ?
OriginalL'auteur tjmc | 2011-04-15
Vous devez vous connecter pour publier un commentaire.
- Je utiliser la réécriture suivante dans le top serveur au niveau de la clause:
À l'aide de ce seul fonctionne pour la plupart des Url, comme
http://foo.com/bar/index.html
, mais il cassehttp://foo.com/index.html
. Pour résoudre ce problème, j'ai le texte suivant règle supplémentaire:La
=404
partie renvoie une erreur 404 lorsque le fichier n'est pas trouvé.Je n'ai aucune idée pourquoi le premier de réécriture n'est pas suffisant.
OriginalL'auteur Nicolas Wu
La configuration suivante m'a permis de rediriger
/index.html
à/
et/subdir/index.html
à/subdir/
:OriginalL'auteur Jackson
Pour la racine
/index.html
, la réponse de Nicolas entraîné une redirection en boucle, j'ai donc dû chercher d'autres réponses.Cette question a été posée sur la nginx des forums et de la réponse, il y a mieux fonctionné.
http://forum.nginx.org/read.php?2,217899,217915
Utiliser
ou
OriginalL'auteur Evgeny
Pour une raison que la plupart des solutions mentionnées ici ne fonctionne pas. Ceux qui ont travaillé m'a donné des erreurs avec manquant /dans l'url. Cette solution fonctionne pour moi.
Collez-le dans votre emplacement directive.
OriginalL'auteur Hendrik
C'est de travailler pour moi:
Il couvre à la fois la racine de l'instance
/index.html
et instances inférieures/bar/index.html
La première partie de l'expression régulière, fondamentalement, se traduit comme:
[nothing]
ou/[something]
- dans le premier cas, $2 est une chaîne vide si vous rediriger vers juste/
, dans le second cas, $2 est[something]
afin de vous rediriger vers/[something]
Je suis un peu plus évolué pour couvrir
index.html
,index.htm
, etindex.php
C'est surprenant, je pensais qu'il avait juste être une double redirection avec nginx enlever les index.html et passer en http, et puis l'équilibrage de charge de rediriger retour à https (mais toujours sans le index.html). Semble votre nginx n'est pas au courant, qu'il devrait mettre de "https" dans l'Url absolues, peut-être que vous pouvez le faire manuellement dans la réécriture de déclaration, au lieu de simplement "/$2" peut-être https://$host/$2
OriginalL'auteur barryp
Celui-ci fonctionne:
OriginalL'auteur mgutt
Les solutions citant
$scheme://domain.com/
supposons que le domaine est codé en dur. Il n'était pas dans mon cas et j'ai donc utilisé:C'est une particularité dans la config nginx. J'ai découvert empiriquement (j'ai peut-être tort) qu'il n'existe aucun moyen de se référer à la racine
/
page en un rapport de mode. J'ai donc été relégué aux référant d'une façon absolue et, à cette fin, nous devons donner à son schéma complet et le nom d'hôte (nom de domaine). Ce petit hack nous permet de nous adresser pour le nom de domaine sans avoir à coder en dur. Je l'ai trouvé particulièrement utile car j'étais en développement et de travail séparé avec mise en scène et de l'Errance (machine virtuelle) des versions du site.OriginalL'auteur Abid Mujtaba