Quiconque a trouvé cela en ligne et essaie de copier-coller les réponses suggérées, méfiez -vous si vous utilisez une configuration Virtualbox avec des ports personnalisés. J'ai dû le changer, par exemple, rewrite (.*)//+(.*) $scheme://$host:4321$1/$2 permanent;où 4321 est le port externe du nginx Virtualbox'd auquel mon navigateur se connecte.
aexl
Réponses:
6
Je voudrais suggérer cette approche:
# remove multiple sequences of forward slashes
# rewrite URI has duplicate slashes already removed by Nginx (merge_slashes on), just need to rewrite back to current location
# note: the use of "^[^?]*?" avoids matches in querystring portion which would cause an infinite redirect loop
if ($request_uri ~ "^[^?]*?//") {
rewrite "^" $scheme://$host$uri permanent;
}
Il utilise le comportement par défaut de nginx - fusion des barres obliques, donc nous n'avons pas besoin de remplacer les barres obliques, nous redirigeons simplement
'merge_slashes off' n'a fait aucune différence et n'a entraîné aucun changement.
Anup Nair
1
Pourquoi ça ne merge_slashes on;marche pas? Le nginx est-il buggé?
Jonathan
1
@Jonathan - Je viens de tomber sur ce point également. Ma compréhension, c'est que merge_slashes oncela ne fait pas ce que vous pensez. Il dit essentiellement à nginx de prendre // et / et /// comme une seule barre oblique (de ne pas fusionner et rediriger de lui-même)
Andrew Newby
1
Je parle d'expérience de l'exécution de plusieurs serveurs de production et serveurs de développement pour une équipe. Ne faites pas cela dans nginx. Utilisez plutôt votre routeur sur votre serveur d'applications (JS / PHP, etc.).
Nginx n'est pas fiable pour les travaux de fond. Par exemple, les redirections, les réécritures et les ifclauses ne sont pas déterministes si vous modifiez votre configuration pour utiliser SSL, un proxy inverse, des ports cachés, etc. Vous pouvez donc le faire fonctionner correctement dans un environnement, mais il pourrait être impossible de le faire fonctionner dans un autre.
Tenez-vous à un langage de programmation approprié pour résoudre les problèmes, même aussi simple que de fusionner des doubles barres obliques. Tu me remercieras plus tard.
Bien que je partage votre opinion, je pense que nous devrions donner aux gens la possibilité de se forger leur propre opinion sur la question. Je préfère Apache à Nginx, pour la même raison que la vôtre. Remarque: Apache mod_rewrite peut également être considéré comme un langage de programmation simple. :-)
rewrite (.*)//+(.*) $scheme://$host:4321$1/$2 permanent;
où 4321 est le port externe du nginx Virtualbox'd auquel mon navigateur se connecte.Réponses:
Je voudrais suggérer cette approche:
Il utilise le comportement par défaut de nginx - fusion des barres obliques, donc nous n'avons pas besoin de remplacer les barres obliques, nous redirigeons simplement
trouvé ici
la source
proxy_pass
J'ai trouvé que la réponse de kwo ne fonctionnait pas. En regardant mon journal de débogage, voici ce qui se passe:
J'ai trouvé que cela fonctionnait pour moi:
Réf: http://rosslawley.co.uk/archive/old/2010/01/10/nginx-how-to-url-cleaning-removing/
la source
Essaye ça:
Il peut y avoir plusieurs redirections pour les barres obliques> 3 ou plusieurs groupes de barres obliques.
la source
merge_slashes on;
marche pas? Le nginx est-il buggé?merge_slashes on
cela ne fait pas ce que vous pensez. Il dit essentiellement à nginx de prendre // et / et /// comme une seule barre oblique (de ne pas fusionner et rediriger de lui-même)Je parle d'expérience de l'exécution de plusieurs serveurs de production et serveurs de développement pour une équipe. Ne faites pas cela dans nginx. Utilisez plutôt votre routeur sur votre serveur d'applications (JS / PHP, etc.).
Nginx n'est pas fiable pour les travaux de fond. Par exemple, les redirections, les réécritures et les
if
clauses ne sont pas déterministes si vous modifiez votre configuration pour utiliser SSL, un proxy inverse, des ports cachés, etc. Vous pouvez donc le faire fonctionner correctement dans un environnement, mais il pourrait être impossible de le faire fonctionner dans un autre.Tenez-vous à un langage de programmation approprié pour résoudre les problèmes, même aussi simple que de fusionner des doubles barres obliques. Tu me remercieras plus tard.
la source
J'aime cette solution:
Voir https://stackoverflow.com/a/27071557/548473
la source
URL example.com//dir1////dir2///dir3 et plus Essayez ça marche pour moi
merge_slashes off; emplacement ~ ^ (. *?) // + (. *?) $ {return 301 $ 1 / $ 2; }
la source