2010-09-08 21 views

Trả lời

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

Câu trả lời này là dành cho cấu hình Apache chứ không phải nginx? – Tom

+0

Vâng, có vẻ như đối với Apache. – tiago

+1

chắc chắn cho apache và không NGINX ... câu trả lời này nên được loại bỏ để tránh nhầm lẫn – galenandrew

-1

điều này có thể được thực hiện chỉ bằng cách sử dụng perl embeded.

7

tôi quản lý để đạt được mục tiêu sử dụng perl nhúng:

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

Vâng, bạn sẽ cần perl. Nếu bạn đang sử dụng Ubuntu, thay vì apt-get install nginx-full, hãy sử dụng apt-get install nginx-extras, sẽ có module perl nhúng. Sau đó, trong tập tin cấu hình của bạn:

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

Hoạt động tốt, mặc dù thông số truy vấn của tôi bị tước. – Jonathan

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

Một vị trí hoặc có thể được xác định bởi một chuỗi tiền tố, hoặc bởi một regular expression. Biểu thức chính quy được chỉ định bằng công cụ sửa đổi trước đó là “~ *” (đối với trường hợp không phân biệt chữ hoa chữ thường) hoặc công cụ sửa đổi “~” (đối với trường hợp trùng khớp chữ hoa).

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

Dựa trên câu trả lời của Adam, tôi đã kết thúc bằng lua, vì nó có sẵn trên máy chủ của tôi.

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

Hãy cẩn thận với câu trả lời này. Nếu là điều xấu: https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/ – MacroMan

Các vấn đề liên quan