web-dev-qa-db-fra.com

nginx URL réécrire en utilisant regex négatif?

J'essaie de rediriger les demandes vers https dans nginx, sauf si il est de la forme hôte/ANY_STRING_OF_CHARS/END_OF_URI, par exemple:

http://Host.org/about # pas de redirection

http://Host.org/users/sign_in # redirige vers https://Host.org/users/sign_in

Cela fonctionne apparemment dans Apache, mais je ne comprends pas comment fonctionne le bang (ignore si cela ne fonctionne pas vraiment):

RewriteRule !/([a-z]+)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

Comment puis-je faire cela dans une règle de réécriture nginx? Cela ne fonctionne pas comme je l'avais espéré:

rewrite !/([a-z]+)$ https://$server_name$request_uri redirect;

Cela ne fait pas la redirection non plus, au cas où la logique serait inversée:

rewrite /([a-z]+)$ https://$server_name$request_uri redirect;

Aidez-moi, s'il vous plaît?

10
kbighorse

Envoie une redirection permanente au client:

server {
  listen 80;
  rewrite ^(/users/\w+)$ https://$Host$1 permanent;
  ...
}

pour une correspondance négative, vous pouvez utiliser:

if ($request_uri !~ "^/users/\w+$")
{
  return 301 https://$Host$request_uri;
}
21
Jack
set $test "0";
if ($request_uri ~ "condition") {
   set $test "1";
}
if ($test ~ "0") {
   return 301 redirect url;
}
1
Sergiy Tytarenko