Réécriture d'adresses racine d'un sous-répertoire dans nginx
Je suis la conversion de mon mediawiki site à utiliser nginx comme un frontend pour les fichiers statiques avec apache sur le backend pour php. J'ai obtenu tout ce travail jusqu'à présent, sauf quand j'ai vue le répertoire racine "example.com" il tente de servir un listing de répertoire et donne une erreur 403 depuis que je l'ai désactivé et n'avez pas un fichier d'index de là.
La réécriture apache règle que j'ai dans l'instant présent est tout simplement:
RewriteRule ^$ /wiki/Main_Page [L]
J'ai essayé quelque chose de similaire avec un emplacement directive dans nginx, mais cela ne fonctionne pas:
location = /{
rewrite "^$" /wiki/Main_Page;
}
Le reste de ma position directives sont:
location /{
try_files $uri $uri/@rewrite;
}
location @rewrite {
rewrite ^/wiki/(.*)$ /w/index.php?title=$1&$args;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
try_files $uri /w/index.php?title=$1&$args;
expires max;
log_not_found off;
}
location ~ \.php?$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080;
}
Je peux simplement mettre un index.php fichier header('location:'), mais je préfère juste le faire correctement avec une règle de réécriture.
Tous les exemples que j'ai trouvé en ligne pour l'exécution de mediawiki avec nginx exécuter le wiki wiki.example.com au lieu d'un /wiki/sous-répertoire.
Edit: j'ai aussi essayé d'ajouter à la try_files comme ceci: try_files $uri $uri/@rewrite /wiki/Main_Page;
avec la même erreur 403 résultat.
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé de l'aide dans la nginx chat irc.
Fondamentalement, ce que je devais faire était d'utiliser un retour au lieu de le réécrire. J'ai donc changé ce:
à ceci:
Je préfère utiliser:
return 301 $scheme://$host/wiki/Main_Page;
À l'aide de règles de réécriture dans la section emplacement comme ceci:
Attention "pause" ici. Les moyens de briser le cycle de réécriture.
Si cette page est situé dans le serveur d'arrière-plan, ici, doit utiliser proxy_pass.
La réponse que vous avez utilisé est une redirection, vous faire sauter la
/
emplacement pour un/wiki
emplacement, Vous pouvez essayer ceci à la placeCela devrait server le Main_Page pour la
/
URIVoici ma solution: