Thứ ba, 10/07/2012 | 00:00 GMT+7

Cách thiết lập Mod_Rewrite


Giới thiệu về Mod_Rewrite

Hãy nghĩ về lần cuối cùng bạn truy cập trang web mua sắm nào đó, tìm kiếm một thứ cụ thể mà bạn cần mua. Cuối cùng khi bạn đã đến trang, URL rất có thể trông giống như sau:

gizmo.com/latest_and_greatest/specific_gadgets/exactly_what_youre_looking_for

Điều này không phải vì trang web này đã dành thời gian để cài đặt mọi folder đơn lẻ mà bạn cần để thực hiện mua hàng của bạn , mà vì một module tiện dụng có tên là Mod_Rewrite. Mod_Rewrite cho phép bạn tạo các URL tùy chỉnh và đơn giản hóa nếu cần. Trên thực tế, URL thực có thể giống với cái này hơn:

http://www.gizmo.com/gp/itemB004RYVI0Q/ref=as_li_ss_tl?

Hướng dẫn này sẽ giới thiệu cho các bạn về Kích hoạt Mod_Rewrite, Tạo và Sử dụng trang .htaccess được yêu cầu và cài đặt ghi lại URL.

Nội dung

  1. Cách kích hoạt Mod_Rewrite
  2. Cách tạo và cho phép sử dụng file .htaccess
  3. Cách sử dụng luật viết lại
  4. Cách sử dụng Chỉ thị Điều khoản Viết lại
  5. Tài nguyên

Cài đặt

Các bước trong hướng dẫn này yêu cầu user phải có quyền root. Bạn có thể xem cách cài đặt điều đó trên Ubuntu tại đây , trong bước 3 và 4.

Ngoài ra, bạn cần phải cài đặt apache trên server của bạn . Nếu chưa có, bạn có thể download cho Ubuntu bằng lệnh sau:

sudo apt-get install apache2

Phần 1 — Cách kích hoạt Mod_Rewrites

Trước khi bắt đầu tạo các đoạn ghi lại URL thực, ta cần kích hoạt module mod_rewrite apache điều khiển chúng. Cái này đơn giản:

sudo a2enmod rewrite

Lệnh kích hoạt module hoặc — nếu nó đã được kích hoạt, sẽ hiển thị dòng chữ "Đã bật tính năng ghi lại module "

Phần 2 — Giới thiệu về Tệp .htaccess:

Khi module đã được kích hoạt, bạn có thể cài đặt ghi lại URL của bạn bằng cách tạo file .htaccess trong folder trang web .

Tệp .htaccess là một cách để cấu hình các chi tiết của trang web mà không cần thay đổi file cấu hình server . Khoảng thời gian bắt đầu tên file sẽ giữ file ẩn trong folder .

Ngoài ra, vị trí của file .htaccess cũng quan trọng. Các cấu hình trong file đó sẽ ảnh hưởng đến mọi thứ trong folder của nó và các folder bên dưới nó.

Bạn có thể tạo file .htaccess trong editor (đảm bảo chỉ đặt tên cho file .htaccess mà không có bất kỳ phần mở rộng hoặc tên nào khác) và sau đó tải file đó lên trang web thông qua ứng dụng client ftp.

Ngoài ra, bạn có thể sử dụng lệnh này, thay thế example.com bằng tên trang web , để tạo file .htaccess của bạn trong terminal.

sudo nano /var/www/example.com/.htaccess

Cách cho phép các thay đổi trong file .htaccess:

Để cho phép file .htaccess overrides cấu hình trang web tiêu chuẩn, hãy bắt đầu bằng cách mở file cấu hình. NB: Bạn cần các quyền sudo cho bước này.

sudo nano /etc/apache2/sites-available/default

Khi ở bên trong file đó, hãy tìm phần sau và thay đổi dòng có nội dung AllowOverride từ Không thành Tất cả. Phần bây giờ sẽ giống như sau:

 <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
 </Directory>

Sau khi bạn lưu và thoát khỏi file đó, hãy khởi động lại apache. Các file .htacess hiện sẽ có sẵn cho tất cả các trang web .

sudo service apache2 restart

Bây giờ tất cả bạn đã được cài đặt để viết lại các URL của trang web của bạn .

Phần 3 — Cách viết lại URL

Toàn bộ hoạt động ghi lại URL diễn ra trong file .htaccess.

Nhìn chung, tất cả các lệnh ghi lại URL đều tuân theo cùng một mẫu:

 RewriteRule Pattern Substitution [OptionalFlags]

Dưới đây là giải thích ngắn gọn về từng phần:

  • RewriteRule: Đây là phần trong đó bạn có thể viết tên của chỉ thị mod_rewrite mà bạn muốn sử dụng.
  • Mẫu: Phần này dành riêng để diễn giải URL được yêu cầu, sử dụng các biểu thức chính quy. Hướng dẫn này không bao gồm thảo luận về cụm từ thông dụng, nhưng bạn có thể tìm thấy hướng dẫn hữu ích về chủ đề này tại đây .
  • Thay thế: Đây là URL thực của trang có thông tin mà ta muốn hiển thị. Nó có thể khó nhớ hoặc khó hiểu do đơn vị đo php hoặc chuỗi số dài. ví dụ. www.cityzoo.com/animals.php?mammals=seals
  • Cờ tùy chọn: Cờ là một thẻ ở cuối chỉ thị Luật ghi lại có thể thay đổi hành vi của biểu thức. Một số cờ phổ biến bao gồm [F], khiến URL bị cấm, [NC], buộc luật bỏ qua việc viết hoa, [R = 301] hoặc [R = 302], kiểm soát mã chuyển hướng bạn muốn sử dụng, [L] cho biết rằng đây là luật cuối cùng trong một loạt.

Ba ví dụ về ghi lại URL:

Ví dụ 1: Đi đến Trang A, tìm trang B:

Đây là ví dụ cơ bản nhất cho việc ghi lại URL: khách truy cập vào trang web nhập một URL vào trình duyệt nhưng được chuyển hướng đến URL khác. Đây là cách cài đặt nó.

Hãy tiếp tục và tạo hai trang riêng biệt cho một trang web — giả sử, một trang dành cho Táo (apple.html) và một trang dành cho Cam (cam.html):

Sao chép mã vào trang Apple:

<html>
  <head>
    <title>Apples</title>
  </head>
  <body>
    <h1>This page is about Apples</h1>
  </body>
</html>

Sau đó, có thể làm trang cam, thay thế tất cả các tên trái cây để tham khảo cho phù hợp.

Bây giờ, hãy mở file .htaccess.

sudo nano /var/www/example.com/.htaccess

Thêm các lệnh ghi lại URL sau vào file :

RewriteEngine on
RewriteRule ^oranges.html$ apples.html

Lưu và thoát.

Khi mọi thứ đã sẵn sàng, hãy truy cập trang web kết thúc bằng "/oranges.html"— tất cả thông tin được hiển thị sẽ đến từ trang web" /apple.html ".

Bây giờ để được giải thích:

  • ^ Orange.html: điều này đề cập đến cách trang bắt đầu. Dấu mũ (^) biểu thị sự bắt đầu của một chuỗi. Nói cách khác - nếu trang có URL mà ta muốn viết lại bắt đầu bằng bất kỳ thứ gì ngoại trừ cam (ví dụ :.navel_oranges.html), nó sẽ không được luật viết lại nhận dạng và nó sẽ không chuyển hướng đến apple.html.
  • $: ký hiệu đô la đề cập đến phần cuối của URL. Nếu có bất kỳ điều gì khác sau các ký tự cuối cùng trong chuỗi, trang web sẽ không thể nhận dạng được theo luật viết lại.
  • táo.html: đây là nơi trình duyệt thực sự chuyển lưu lượng truy cập.

Ví dụ 2: Trang web có một tham số trong URL của nó. Làm thế nào để nó giống như một folder con.

Ví dụ đầu tiên đề cập đến một trang web chỉ cần được thay thế bằng một trang khác. Tuy nhiên, ví dụ dưới đây giải quyết một trường hợp phổ biến có thể thấy khi có một tham số trong url.

Kiểm tra URL này:

http://example.com/results.php?products=apple

Nó sẽ được hiển thị rõ ràng hơn nhiều như:

 http://example.com/products/apple

Các dòng trong file .htaccess sẽ giống như sau:

RewriteEngine on
RewriteRule ^products/([A-Za-z0-9-]+)/?$ results.php?products=$1 [NC]

Bây giờ để được giải thích:

  • ^ products: Để được bắt và định tuyến lại, URL phải bắt đầu bằng sản phẩm ( lưu ý URL này chỉ đề cập đến văn bản sau domain ). Nếu nó bắt đầu bằng bất kỳ thứ gì khác, luật sẽ không áp dụng và URL sẽ giữ nguyên.
  • ([A-Za-z0-9 -] +): Nội dung trong dấu ngoặc đơn đề cập đến bất kỳ thông tin nào có thể được nhập vào URL. Nói cách khác, URL sẽ được viết lại để phản ánh bất cứ điều gì mà khách truy cập vào trang web nhập sau / products /.
  • +: Dấu cộng cho biết những gì trong ngoặc có thể là một hoặc nhiều ký tự (trái ngược với, chẳng hạn, một ký tự đơn lẻ là một chữ cái hoặc một số).
  • /? $: ký hiệu đô la chỉ ra cuối chuỗi. Dấu chấm hỏi cho phép ký tự cuối cùng trong chuỗi là một dấu gạch chéo (mặc dù nó không yêu cầu).
  • results.php? products = $ 1: $ 1 cho biết chuỗi từ mẫu sẽ đi đến đâu. Nói cách khác, nó sẽ đưa vào thông tin thu được từ bất cứ thứ gì mọi người đã viết trong phần "([A-Za-z0-9 -] +):". Sau khi hoàn tất , trình duyệt sẽ hiển thị thông tin từ URL thứ hai
  • [NC]: đây là một cờ ở cuối cụm từ, cho biết rằng luật nên bỏ qua các trường hợp của tất cả các ký tự trong chuỗi.

Ví dụ 3: Trang web có một URL khó sử dụng. Làm thế nào để làm sạch nó

Loại tình huống này có thể phát sinh khi các URL dài và phức tạp.

Lấy URL bên dưới làm ví dụ:

http://example.com/results.php?products=produce&type=fruit&species=apple

Dù URL có hiệu quả trong việc cung cấp nội dung chính xác, thì nó cũng không đáng nhớ lắm đối với người tiêu dùng. Việc ghi lại URL sẽ cho phép bạn chuyển đổi URL thành một thứ gì đó đơn giản và rõ ràng hơn:

http://example.com/produce/fruit/apple

In order to accomplish this, we would need the following lines in our .htaccess file (you can add as many section as needed in the .htaccess file):

RewriteEngine on
RewriteRule ^(meat|produce|dairy)/([^/.]+)/([^/.]+)$ results.php?products=$1&type=$2&species=$3

Now for an explanation:

  • First the ^(caret) starts the expression.
  • (meat|produce|dairy): If we want to limit the options that can be typed in, we can specify the only values we will accept: in this case the variety of groceries. If anything besides one of those three 3 keywords is typed in, the URL rewrite will not take place.
  • The ([^/.]+) indicates that anything can be written between the forward slash besides the characters following the caret, in this case, the forward slash or period.
  • results.php?products=$1&type=$2&species=$3: Each value in the parentheses will be extracted and then applied to the longer URL in the substitution part of the expression. $1 indicates the first parant

    Dù URL có hiệu quả trong việc cung cấp nội dung chính xác, thì nó cũng không đáng nhớ lắm đối với người tiêu dùng. Việc ghi lại URL sẽ cho phép bạn chuyển đổi URL thành một thứ gì đó đơn giản và rõ ràng hơn:

     http://example.com/produce/fruit/apple

    Để thực hiện điều này, ta cần các dòng sau trong file .htaccess của bạn (bạn có thể thêm nhiều phần nếu cần trong file .htaccess):

    RewriteEngine on
    RewriteRule ^(meat|produce|dairy)/([^/.]+)/([^/.]+)$ results.php?products=$1&type=$2&species=$3

    Now for an explanation:

    • First the ^(caret) starts the expression.
    • (meat|produce|dairy): If we want to limit the options that can be typed in, we can specify the only values we will accept: in this case the variety of groceries. If anything besides one of those three 3 keywords is typed in, the URL rewrite will not take place.
    • The ([^/.]+) indicates that anything can be written between the forward slash besides the characters following the caret, in this case, the forward slash or period.
    • results.php?products=$1&type=$2&species=$3: Each value in the parentheses will be extracted and then applied to the longer URL in the substitution part of the expression. $1 indicates the first parantheses, $2, the second, $3, the third. Bây giờ để được giải thích:

      • Đầu tiên dấu ^ (dấu mũ) bắt đầu biểu thức.
      • (thịt | production | sữa): Nếu ta muốn giới hạn các tùy chọn có thể được nhập vào, ta có thể chỉ định các giá trị duy nhất mà ta sẽ chấp nhận: trong trường hợp này là nhiều loại hàng tạp hóa. Nếu bất kỳ thứ gì ngoài một trong ba từ khóa đó được nhập vào, quá trình ghi lại URL sẽ không diễn ra.
      • Dấu ([^ /.] +) Cho biết bất cứ thứ gì có thể được viết giữa dấu gạch chéo lên bên cạnh các ký tự theo sau dấu mũ, trong trường hợp này là dấu gạch chéo hoặc dấu chấm.
      • results.php? products = $ 1 & type = $ 2 & loài = $ 3: Mỗi giá trị trong dấu ngoặc đơn sẽ được extract và sau đó áp dụng cho URL dài hơn trong phần thay thế của biểu thức. $ 1 cho biết các tham số đầu tiên, $ 2, thứ hai, $ 3, thứ ba.

      Còn tiếp ở Trang 2

      Bởi Etel Sverdlov

      Tags:

      Các tin liên quan