Hướng dẫn convert .htaccess để rewrite url trên vps, server nginx

Thảo luận trong 'Kiến Thức' bắt đầu bởi Admin, 16 Tháng tư 2016.

  1. Admin Nothing to lose.. your love to win..

    Bài viết:
    4,093
    .htaccess là tiện ích dành riêng cho Apache Server, để rewirte được Url bạn cần convert sang ruler của nginx.

    Dưới đây là những tiện ích online convert sang rewrite ruler của nginx.

    Các trang web convert .htacess online:

    http://winginx.com/en/htaccess

    http://www.anilcetin.com

    https://labs.gidix.de/nginx

    Riêng rewrite cho link file hoặc ảnh trên nginx thì các bạn làm theo cú pháp sau:

    Mã:
    location ~ \.(gif|jpg|png) {
            try_files $uri @img_proxy;
    }
    
    location @img_proxy {
            rewrite ^/img/(.*)/(.*).jpg$ /img.php?id=$1;
    }
    Bạn muốn rewrite cho domain nào trên VPS, Server thì chèn code đã convert vào file domain.com.conf của domain đó trong thư mục etc/nginx/conf.d.

    Demo cho các bạn tham khảo site: nhoc.vn

    Mã:
    location / {
        rewrite ^/([_0-9a-z-]+).html$ /index.php?prd=$1 last;
        rewrite ^/danh-muc/(.*).html$ /index.php?ctg=$1 last;
        rewrite ^/ho-tro/(.*).html$ /index.php?spt=$1 last;
        rewrite ^/dang-nhap$ /index.php?act=login last;
        rewrite ^/dang-ky$ /index.php?act=register last;
        rewrite ^/gio-hang$ /index.php?act=cart last;
        rewrite ^/check-out$ /index.php?act=checkout last;
        rewrite ^/thanh-toan$ /index.php?act=payment last;
        rewrite ^/ket-thuc$ /index.php?act=finish last;
        rewrite ^/ho-tro-khach-hang$ /index.php?act=support last;
        rewrite ^/member/(.*)$ /index.php?unact=user last;
        rewrite ^/danh-sach-thanh-vien$ /index.php?unact=member last;
        rewrite ^/hoi-dap$ /index.php?unact=faq last;
        rewrite ^/don-hang$ /index.php?unact=order last;
        rewrite ^/truyen-thong$ /index.php?unact=news last;
        rewrite ^/tuyen-dung$ /index.php?unact=work last;
        rewrite ^/back-link$ /index.php?unact=work last;
        rewrite ^/life.love.shopping$ /index.php?unact=plus last;
        rewrite ^/rss.map$ /index.php?menu=rss last;
        rewrite ^/site.map$ /index.php?menu=map last;
        rewrite ^/rss$ /xml.php?rss=home last;
        rewrite ^/rss/(.*).rss$ /xml.php?rss=$1 last;
        rewrite ^/sitemap.xml$ /xml.php?map last;
    }
    
    location ~ ^/sml/([0-9]+)/(.*).png$ {
        try_files $uri $uri/ /image.php?id=$1&size=300;
    }
    
    location ~ ^/prd/([0-9]+)/(.*).png$ {
        try_files $uri $uri/ /image.php?id=$1&size=600;
    }

    Sau đó restart lại VPS, Server của bạn để việc thay đổi có hiệu lực.

    Lệnh restart VPS - Server nginx:

    Mã:
    Centos 6: service nginx restart
    
    Centos 7: systemctl restart nginx.service
    Demo nginx chạy url rewrite:

    Nghe Nhạc Online

    Hài Tết Mới Nhất
     
    Chỉnh sửa cuối: 28 Tháng chín 2017
  2. Admin Nothing to lose.. your love to win..

    Bài viết:
    4,093
    Một số ví dụ, cấu hình hay dùng ruler nginx

    Chuyển từ www sang non-www:

    Mã:
    if ($host = "www.mydomain.com") {
        rewrite ^ $scheme://mydomain.com$uri permanent;
    }
    location / {
        try_files $uri $uri/ @modx-rewrite;
    }
    Ngược lại: domain.com -> www.domain.com

    Mã:
    if ($host = "domain.com") {
        rewrite ^ $scheme://www.domain.com$uri permanent;
    }
    location / {
        try_files $uri $uri/ @modx-rewrite;
    }
    SSL Sites

    Google hiện tại đang sử dụng SSL là một yếu tố xếp hạng, nếu bạn sử dụng các site eCommerce, hãy sử dụng SSL.

    Rule bên dưới sẽ redirect tất cả request sử dụng HTTPS, thay www.domain.com bằng tên miền của bạn.

    Mã:
    if ($scheme != "https") {
        rewrite ^ https://www.domain.com$uri permanent;
    }
    if ($host != "www.domain.com") {
        rewrite ^ https://www.domain.com$uri permanent;
    }
    Bắt buộc phải sử dụng SSL với một đường dẫn bất kỳ:

    Mã:
    set $redirect false;
    if ($request_uri ~ ^/manager(\/)?$ ) {
        set $redirect true;
    }
    if ($scheme = https) {
        set $redirect false;
    }
    if ($redirect = true) {
        return 301 https://www.domain.com$request_uri;
    }
    Tối ưu Browser Caching

    Bằng việc sử dụng browser caching, website của bạn sẽ load nhanh hơn rất nhiều kể từ sau lần visit đầu tiên:

    Mã:
    location ~* \.(?:ico|css|js|jpe?g|png|gif|svg|pdf|mov|mp4|mp3|woff)$ {
        expires 7d;
        add_header Pragma public;
        add_header Cache-Control "public";
        gzip_vary on;
    }
    Giới hạn IP truy cập

    Trong trường hợp bạn muốn giới hạn IP truy cập vào một đường dẫn bất kỳ, hãy sử dụng rule bên dưới:

    Mã:
    location /manager/ {
    allow 192.168.1.1/24;
    allow 127.0.0.1;
    deny all;
    }

    Ngăn những site khác sử dụng hình ảnh

    Với đoạn code dưới, bạn sẽ hạn chế những site khác sử dụng hình ảnh trực tiếp:

    Mã:
    location ~ .(gif|png|jpe?g)$ {
    valid_referers none blocked .domain.com;
    if ($invalid_referer) {
    return 403;
    }
    }
    Nếu bạn muốn thay vì báo lỗi mà hiển thị một hình ảnh khác, hãy sử dụng code bên dưới:

    Mã:
    location ~ .(gif|png|jpe?g)$ {
    valid_referers none blocked .domain.com;
    if ($invalid_referer) {
    rewrite (.*)\.(jpg|jpeg|png|gif)$ http://www.domain.com/images/warning.jpg;
    }
    }
    Bảo vệ thư mục bằng mật khẩu

    Đầu tiên, bạn cần sử dụng tool để tạo file .htpasswd, sau đó dùng đoạn code bên dưới, giả sử mình lưu ở /root/.htpasswd

    Mã:
    location /protectme/ {
    auth_basic "Restricted";
    auth_basic_user_file /root/.htpasswd;
    }

    Rewrite URL

    Ví dụ bên dưới giả sử bạn muốn rewrite đường dẫn http://domain.com/listing/123 thành http://domain.com/listing.php?id=123

    Mã:
    rewrite ^/listing/(.*)$ /listing.php?id=$1 last;
    (.*) ở đây là regular expression, đại diện cho bất kỳ ký tự nào. Nếu thêm regular expression, bạn sử dụng tương ứng $2, $3

    Redirect URL cũ sang URL mới

    Redirect /someoldarticle.html sang /some/newarticle.html

    Mã:
    rewrite ^/someoldarticle\.html /some/newarticle.html permanent;

    Chạy WordPress ở Sub-folder

    Mã:
    location /demo/ {
    try_files $uri $uri/ /demo/index.php?$args;
    }

    Hiển thị nội dung thư mục

    Mã:
    location / {
    autoindex on;
    }
    hoặc tắt đi

    Mã:
    location / {
    autoindex off;
    }
     
    Chỉnh sửa cuối: 5 Tháng bảy 2016
  3. Admin Nothing to lose.. your love to win..

    Bài viết:
    4,093
    Tại sao Nginx không hỗ trợ .htaccess?

    Vì sao Nginx không hỗ trợ .htaccess? Đây có thể là câu hỏi phổ biến nhất cho những ai đang sử dụng Apache làm máy chủ web (Web Server) và có ý định di chuyển đến máy chủ web Nginx. Hôm nay tôi giúp bạn giải đáp lý do vì sao mà Nginx thời điểm hiện tại không hỗ trợ và chắc chắn trong tương lai sẽ không có khái niệm .htaccess trong Nginx.

    Trước hết ta hãy tìm hiểu file .htaccess hoạt động như thế nào trên Apache? Mỗi khi Apache xử lý một yêu cầu, đầu tiên nó kiểm tra và xử lý bất kỳ tập tin .htaccess trong cùng thư mục với tập tin nó đang phục vụ. Điều này là hoàn toàn bình thường, tuy nhiên Apache còn đi sâu vào tất cả các thư mục con của một thư mục hiện tại, và trong mỗi thư mục, nó tiếp tục sẽ kiểm tra và xử lý file .htaccess trong tất cả các thư mục đó. Ví dụ:

    Mã:
    /home /home/username/www
    
    /home/username/www/trangwebcuaban.com
    
    /home/username/www/trangwebcuaban.com/thumuc
    
    /home/username/www/trangwebcuaban.com/thumuc/thumuccon
    Đây là cách Apache có thể xử lý các quy tắc (rule) trong file .htaccess mà không cần khởi động lại/nạp lại tải lại phần lõi (core) của mình, nhưng như bạn thấy, đó là một vấn đề gây tốn tài nguyên nghiêm trọng, đặc biệt cho các trang web lớn với hàng triệu lưu lượng truy cập. Có thể nói .htaccess là chức năng gây tốn tài nguyên và hiệu năng thuộc dạng cao của Apache. Điều này là không tốt cho tốc độ Website/Web Server.

    Bảng so sánh hiệu suất truy xuất file dưới đây sẽ cho các bạn thấy rõ hiệu suất của các web server:

    [​IMG]

    Ngoài ra trên thực tế file .htaccess thực sự là không an toàn, vì nó được cung cấp như là một cách để thay đổi các thiết lập máy chủ web như cang thiệp vào cấu hình file php.ini.. và trang web từ một tập tin .htaccess duy nhất mà được đặt bên trong thư mục chủ của mỗi trang web. Điều này sẽ không xảy ra nếu bạn có quy tắc của bạn trong cấu hình Nginx, như chỉ cho phép người dùng root hay ngươi dùng được ủy quyền mới được phép làm như vậy. Như vậy, file . htaccess ngoài cung cấp một sự linh hoạt và thuận tiện cho việc quản trị hoặc phát triển web nó còn làm giảm hiệu suất đáng kể và mở thêm một phương thức thuận tiện cho các cuộc tấn công vào trang web của bạn.

    Kết luận: Như các bạn đã biết Nginx làmột máy chủ web có hiệu suất cao với khả năng sử dụng rất ít RAM và các tính năng quan trọng để xây dựng cơ sở hạ tầng web hiện đại và hiệu quả. Hiệu năng chính là thế mạnh, ưu điểm của Nginx so với các Web Server khác và định hướng phát triển của Nginx theo hướng chú trọng, tối ưu có hiệu năng tốt nhất có thể. Vì vậy, nếu bạn vẫn yêu thích sự linh hoạt của .htaccess và yêu tố hiệu suất không ảnh hưởng tới bạn nhiều, bạn có thể làm việc với Apache và vẫn sử dụng file .htaccess. Tuy nhiên nếu bạn thật sư khắc khe và quam tâm về hiệu suất và bảo mật của ứng dụng web, bạn không nên cố tìm cách sử dụng file .htaccess trên Nginx vì đó là một sai lầm nghiêm trọng và sẽ phá hủy hiệu năng của Nginx.

    Nguồn: bloghosting.vn
     
Trả lời qua Facebook
Đang tải...