2010-09-08 12 views

Antwort

-16
RewriteEngine On 
RewriteMap lc int:tolower 
RewriteCond %{REQUEST_URI} [A-Z] 
RewriteRule (.*) ${lc:$1} [R=301,L] 
+4

Diese Antwort ist für eine Apache-Konfiguration, nicht Nginx? – Tom

+0

Ja, das scheint für Apache. – tiago

+1

definitiv für Apache und nicht NGINX ... diese Antwort sollte entfernt werden, um Verwechslungen zu vermeiden – galenandrew

-1

Dieses Ding kann mit embeded Perl nur durchgeführt werden.

7

ich es geschafft, das Ziel Embedded Perl zu erreichen mit:

location ~ [A-Z] { 
    perl 'sub { my $r = shift; $r->internal_redirect(lc($r->uri)); }'; 
} 
13

Ja, Sie Perl gehen zu müssen. Wenn Sie Ubuntu verwenden, verwenden Sie apt-get install nginx-full mit apt-get install nginx-extras, das das eingebettete Perl-Modul enthält. in der Konfigurationsdatei Dann:

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; 
     } 
    ... 
+0

Funktioniert gut, obwohl meine Abfrage-Parameter werden entfernt. – Jonathan

4
location ~*^/test/ { 
    return 301 http://www.example.com/test; 
} 

Ein Standort kann entweder durch ein Präfix-String, oder durch einen regulären Ausdruck definiert werden. Reguläre Ausdrücke werden mit dem vorangestellten "~ *" -Modifikator (für die Unterscheidung zwischen Groß- und Kleinschreibung) oder dem Modifizierer "~" (für die Unterscheidung zwischen Groß- und Kleinschreibung) angegeben.

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

3
location /dupa/ { 
    set_by_lua $request_uri_low "return ngx.arg[1]:lower()" $request_uri; 
    rewrite^https://$host$request_uri_low; 
} 
0

Basierend auf Adams Antwort, landete ich lua mit bis, wie es auf meinem Server verfügbar ist.

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; 
} 
+0

Seien Sie vorsichtig mit dieser Antwort. Wenn es böse ist: https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/ – MacroMan