tôi cần phải dịch các địa chỉ:Làm thế nào tôi có thể dịch chữ hoa thành chữ viết thường trong quy tắc viết lại trong máy chủ web nginx?
www.example.com/TEST trong ---> www.example.com/test
tôi cần phải dịch các địa chỉ:Làm thế nào tôi có thể dịch chữ hoa thành chữ viết thường trong quy tắc viết lại trong máy chủ web nginx?
www.example.com/TEST trong ---> www.example.com/test
RewriteEngine On
RewriteMap lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]
điều này có thể được thực hiện chỉ bằng cách sử dụng perl embeded.
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)); }';
}
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;
}
...
Hoạt động tốt, mặc dù thông số truy vấn của tôi bị tước. – Jonathan
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
location /dupa/ {
set_by_lua $request_uri_low "return ngx.arg[1]:lower()" $request_uri;
rewrite^https://$host$request_uri_low;
}
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;
}
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âu trả lời này là dành cho cấu hình Apache chứ không phải nginx? – Tom
Vâng, có vẻ như đối với Apache. – tiago
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