web-dev-qa-db-ja.com

負の正規表現を使用してnginx URLを書き換えますか?

Nginxでhttpsにリクエストをリダイレクトしようとしていますが、でない限り、Host/ANY_STRING_OF_CHARS/END_OF_URIの形式です(例:

http://Host.org/about #リダイレクトなし

http://Host.org/users/sign_in #リダイレクト先 https://Host.org/users/sign_in

これは明らかにApacheで機能しますが、強打の仕組みがわかりません(実際に機能しない場合は無視してください)。

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

Nginx書き換えルールでこれを行うにはどうすればよいですか?これは私が望んだように機能していません:

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

逆のロジックがあった場合に備えて、これもリダイレクトを行いません。

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

助けてください?

10
kbighorse

クライアントに永続的なリダイレクトを送信します。

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

否定的な一致の場合、次のように使用できます。

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