Ich brauche die Adresse zu übersetzen:Wie kann ich Groß- und Kleinbuchstaben in einer Rewrite-Regel im nginx-Webserver übersetzen?
www.example.com/TEST in ---> www.example.com/test
Ich brauche die Adresse zu übersetzen:Wie kann ich Groß- und Kleinbuchstaben in einer Rewrite-Regel im nginx-Webserver übersetzen?
www.example.com/TEST in ---> www.example.com/test
RewriteEngine On
RewriteMap lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]
Dieses Ding kann mit embeded Perl nur durchgeführt werden.
ich es geschafft, das Ziel Embedded Perl zu erreichen mit:
location ~ [A-Z] {
perl 'sub { my $r = shift; $r->internal_redirect(lc($r->uri)); }';
}
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;
}
...
Funktioniert gut, obwohl meine Abfrage-Parameter werden entfernt. – Jonathan
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
location /dupa/ {
set_by_lua $request_uri_low "return ngx.arg[1]:lower()" $request_uri;
rewrite^https://$host$request_uri_low;
}
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;
}
Seien Sie vorsichtig mit dieser Antwort. Wenn es böse ist: https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/ – MacroMan
Diese Antwort ist für eine Apache-Konfiguration, nicht Nginx? – Tom
Ja, das scheint für Apache. – tiago
definitiv für Apache und nicht NGINX ... diese Antwort sollte entfernt werden, um Verwechslungen zu vermeiden – galenandrew