Как я могу перевести прописные буквы в строчные в правиле перезаписи на веб-сервере nginx? - PullRequest
23 голосов
/ 08 сентября 2010

Мне нужно перевести адрес:

www.example.com / TEST in ---> www.example.com/test

Ответы [ 5 ]

14 голосов
/ 23 июня 2012

Да, вам понадобится Perl.Если вы используете Ubuntu, вместо apt-get install nginx-full используйте apt-get install nginx-extras, который будет иметь встроенный модуль perl.Затем в вашем конфигурационном файле:

  http {
  ...
    # Include the perl module
    perl_modules perl/lib;
    ...
    # Define this function
    perl_set $uri_lowercase 'sub {
      my $r = shift;
      my $uri = $r->uri;
      $uri = lc($uri);
      return $uri;
    }';
    ...
    server {
    ...
      # As your first location entry, tell nginx to rewrite your uri,
      # if the path contains uppercase characters
      location ~ [A-Z] {
        rewrite ^(.*)$ $scheme://$host$uri_lowercase;
      }
    ...
7 голосов
/ 16 июня 2011

Мне удалось достичь цели с помощью встроенного Perl:

location ~ [A-Z] {
  perl 'sub { my $r = shift; $r->internal_redirect(lc($r->uri)); }';
}
4 голосов
/ 02 июня 2015
location /dupa/ {
    set_by_lua $request_uri_low "return ngx.arg[1]:lower()" $request_uri;
    rewrite ^ https://$host$request_uri_low;
}
4 голосов
/ 28 ноября 2014
location ~*^/test/ {
  return 301 http://www.example.com/test;
}

Местоположение может быть определено строкой префикса или регулярным выражением.Регулярные выражения задаются с помощью предыдущего модификатора «~ *» (для сопоставления без учета регистра) или модификатора «~» (для сопоставления с учетом регистра).

Soruce: http://nginx.org/en/docs/http/ngx_http_core_module.html#location

1 голос
/ 02 января 2018

Основываясь на ответе Адама, я использовал lua, так как он доступен на моем сервере.

set_by_lua $request_uri_low "return ngx.arg[1]:lower()" $request_uri;
if ($request_uri_low != $request_uri) {
   set $redirect_to_lower 1;
}
if (!-f $request_uri) {
    set $redirect_to_lower "${redirect_to_lower}1";
}
if ($redirect_to_lower = 11) {
    rewrite . https://$host$request_uri_low permanent;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...