Thứ năm, 15/12/2016 | 00:00 GMT+7

Cách tạo chuyển hướng tạm thời và vĩnh viễn với Apache

Chuyển hướng HTTP là cách để trỏ domain hoặc địa chỉ này sang domain hoặc địa chỉ khác. Có một số loại chuyển hướng khác nhau, mỗi loại có ý nghĩa khác nhau đối với trình duyệt của khách hàng. Hai loại phổ biến nhất là chuyển hướng tạm thời và chuyển hướng vĩnh viễn.

Chuyển hướng tạm thời ( tìm thấy mã trạng thái phản hồi 302 ) rất hữu ích nếu một URL tạm thời cần được phân phát từ một vị trí khác. Ví dụ: nếu bạn đang thực hiện bảo trì trang web, bạn có thể cần sử dụng chuyển hướng tạm thời từ domain của bạn đến trang giải thích để thông báo cho khách truy cập của bạn rằng bạn sẽ sớm quay lại.

Mặt khác, chuyển hướng vĩnh viễn (mã trạng thái phản hồi là 301 Moved Permanently ), thông báo cho trình duyệt rằng nó sẽ quên hoàn toàn địa chỉ cũ và không cố gắng truy cập vào nó nữa. Những điều này hữu ích khi nội dung của bạn đã được chuyển vĩnh viễn đến một vị trí mới, chẳng hạn như khi bạn thay đổi domain .

Bạn có thể tạo chuyển hướng tạm thời trong Apache bằng cách thêm một dòng như thế này vào mục nhập server ảo trong file cấu hình server :

Redirect /oldlocation http://www.newdomain.com/newlocation 

Tương tự, sử dụng một dòng như thế này để chuyển hướng vĩnh viễn:

Redirect permanent /oldlocation http://www.newdomain.com/newlocation 

Hướng dẫn này sẽ giải thích sâu hơn về cách triển khai từng loại chuyển hướng trong Apache và đi qua một số ví dụ cho các trường hợp sử dụng cụ thể.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần :

Giải pháp trong nháy mắt

Trong Apache, bạn có thể thực hiện các chuyển hướng đơn giản trên một trang bằng cách sử dụng chỉ thị Redirect , có trong module mod_alias được bật theo mặc định trên bản cài đặt Apache mới. Lệnh này có ít nhất hai đối số, URL cũ và URL mới và được dùng để tạo cả chuyển hướng tạm thời và vĩnh viễn.

Ở dạng đơn giản nhất, bạn có thể thực hiện chuyển hướng tạm thời với các dòng sau trong cấu hình server của bạn :

Chuyển hướng tạm thời với Chuyển hướng
<VirtualHost *:80>     ServerName www.domain1.com     Redirect / http://www.domain2.com </VirtualHost>  <VirtualHost *:80>     ServerName www.domain2.com     . . . </VirtualHost> 

Chuyển hướng này hướng dẫn trình duyệt chuyển hướng tất cả các yêu cầu cho www.domain1.com đến www.domain2.com . Tuy nhiên, giải pháp này chỉ hoạt động cho một trang chủ duy nhất, không cho toàn bộ trang web.

Để chuyển hướng nhiều trang, bạn có thể sử dụng chỉ thị RedirectMatch , chỉ thị này sử dụng biểu thức chính quy để chỉ định toàn bộ folder thay vì chỉ các file đơn lẻ. RedirectMatch đối sánh với các mẫu biểu thức chính quy trong ngoặc đơn và sau đó tham chiếu đến văn bản phù hợp trong đích chuyển hướng bằng cách sử dụng biểu thức $1 , trong đó 1 là group văn bản phù hợp đầu tiên. Trong các ví dụ phức tạp hơn, các group đối sánh tiếp theo được đưa ra các số theo thứ tự.

Ví dụ: nếu bạn muốn tạm thời chuyển hướng mọi trang trong www.domain1.com đến www.domain2.com , bạn có thể sử dụng như sau:

Chuyển hướng tạm thời với RedirectMatch
<VirtualHost *:80>     ServerName www.domain1.com     RedirectMatch ^/(.*)$ http://www.domain2.com/$1 </VirtualHost>  <VirtualHost *:80>     ServerName www.domain2.com     . . . </VirtualHost> 

Theo mặc định, cả hai RedirectRedirectMatch chỉ thị thành lập một chuyển hướng tạm thời. Nếu bạn muốn tạo chuyển hướng vĩnh viễn, bạn có thể thực hiện bằng cách thêm permanent vào một trong các chỉ thị:

Chuyển hướng vĩnh viễn
Redirect permanent / http://www.domain2.com RedirectMatch permanent ^/(.*)$ http://www.domain2.com/$1 

Bạn cũng có thể tạo chuyển hướng linh hoạt và mạnh mẽ hơn với module mod_rewrite . Điều này nằm ngoài phạm vi của bài viết này, nhưng bạn có thể bắt đầu với mod_rewrite trong Cách cài đặt mod_rewrite cho Apache .

Hãy chuyển sang một số ví dụ cụ thể.

Ví dụ 1 - Chuyển sang một domain khác

Nếu bạn đã cài đặt sự hiện diện trên web và muốn thay đổi domain của bạn thành một địa chỉ mới, tốt nhất là bạn không nên từ bỏ domain cũ của bạn . Dấu trang đến trang web và các liên kết đến trang web nằm trên các trang khác trên internet sẽ bị hỏng nếu nội dung của bạn biến mất mà không có bất kỳ hướng dẫn nào cho trình duyệt về cách tìm vị trí mới của nó. Thay đổi domain mà không chuyển hướng sẽ khiến trang web mất lưu lượng truy cập từ những khách truy cập trước đó.

Trong ví dụ này, ta sẽ cấu hình chuyển hướng từ domain cũ có tên là domain1.com sang domain mới có tên là domain2.com . Ta sẽ sử dụng chuyển hướng vĩnh viễn ở đây vì domain cũ sẽ bị gỡ xuống và tất cả lưu lượng truy cập sẽ chuyển sang domain mới từ bây giờ.

Giả sử bạn đã cấu hình trang web của bạn để được phân phát từ một domain duy nhất có tên là domain1.com đã được cấu hình trong Apache như sau:

/etc/apache2/sites-available/domain1.com.conf
<VirtualHost *:80>     ServerAdmin admin@domain1.com     ServerName domain1.com     ServerAlias www.domain1.com     DocumentRoot /var/www/domain1.com/public_html     ErrorLog ${APACHE_LOG_DIR}/error.log     CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

Ta cũng sẽ giả sử rằng bạn đang cung cấp version trang web trong tương lai của bạn tại domain2.com :

/etc/apache2/sites-available/domain2.com.conf
<VirtualHost *:80>     ServerAdmin admin@domain2.com     ServerName domain2.com     ServerAlias www.domain2.com     DocumentRoot /var/www/domain2.com/public_html     ErrorLog ${APACHE_LOG_DIR}/error.log     CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

Hãy thay đổi file cấu hình server ảo domain1.com để thêm chuyển hướng vĩnh viễn đến domain2.com :

/etc/apache2/sites-available/domain1.com.conf
<VirtualHost *:80>     ServerAdmin admin@domain1.com     ServerName domain1.com     ServerAlias www.domain1.com         DocumentRoot /var/www/domain1.com/public_html     ErrorLog ${APACHE_LOG_DIR}/error.log     CustomLog ${APACHE_LOG_DIR}/access.log combined     RedirectMatch permanent ^/(.*)$ http://domain2.com/$1 </VirtualHost> 

Ta đã thêm chuyển hướng nói trên bằng cách sử dụng chỉ thị RedirectMatch . Ta sử dụng RedirectMatch thay vì một Redirect đơn giản đảm bảo rằng tất cả các trang của trang web sẽ bị ảnh hưởng, không chỉ trang chủ. Biểu thức chính quy ^/(.*)$ Trùng với mọi thứ sau dấu / trong URL. Ví dụ: http://domain1.com/ index.html sẽ được chuyển hướng đến http://domain2.com/ index.html . Để đạt được chuyển hướng vĩnh viễn, ta chỉ cần thêm permanent sau chỉ thị RedirectMatch .

Lưu ý: Hãy nhớ khởi động lại Apache sau khi thay đổi cấu hình bằng cách sử dụng systemctl restart apache2 .

Ví dụ 2 - Tạo trải nghiệm ổn định bất chấp thay đổi tên trang

Đôi khi, cần phải thay đổi tên của các trang riêng lẻ đã được xuất bản và nhận được lưu lượng truy cập trên trang web . Chỉ riêng việc thay đổi tên sẽ gây ra lỗi 404 Not Found cho những khách truy cập đang cố gắng truy cập vào URL root , nhưng bạn có thể tránh điều này bằng cách sử dụng chuyển hướng. Điều này đảm bảo những người đã đánh dấu trang cũ của bạn hoặc tìm thấy chúng thông qua các liên kết lỗi thời trên công cụ tìm kiếm, vẫn sẽ đến đúng trang.

Hãy tưởng tượng trang web có hai trang riêng biệt cho các sản phẩm và dịch vụ được gọi là products.htmlservices.html tương ứng. Bây giờ, bạn đã quyết định thay thế hai trang đó bằng một trang ưu đãi duy nhất có tên là offers.html . Ta sẽ cấu hình một chuyển hướng đơn giản cho products.htmlservices.html đến offers.html .

Ta giả sử bạn đã cấu hình trang web của bạn như sau:

Cấu hình server ảo ban đầu giả định
<VirtualHost *:80>     ServerName example.com     . . . </VirtualHost> 

Việc cấu hình các chuyển hướng cũng đơn giản như sử dụng hai chỉ thị Redirect .

Đã thêm chuyển hướng vào cấu hình ban đầu
<VirtualHost *:80>     ServerName example.com      Redirect permanent /products.html /offer.html     Redirect permanent /services.html /offer.html     . . . </VirtualHost> 

Chỉ thị Redirect chấp nhận địa chỉ ban đầu phải được chuyển hướng cũng như địa chỉ đích của một trang mới. Vì thay đổi ở đây không phải là thay đổi tạm thời, ta cũng đã sử dụng permanent trong chỉ thị. Bạn có thể sử dụng nhiều chuyển hướng như vậy nếu muốn đảm bảo khách truy cập của bạn sẽ không gặp lỗi Không tìm thấy không cần thiết khi di chuyển nội dung trang web.

Kết luận

Đến đây bạn có kiến thức để chuyển hướng yêu cầu đến các vị trí mới. Đảm bảo sử dụng đúng loại chuyển hướng, vì việc sử dụng chuyển hướng tạm thời không đúng cách có thể ảnh hưởng đến xếp hạng tìm kiếm của bạn.

Có nhiều cách sử dụng khác của chuyển hướng HTTP, bao gồm việc buộc kết nối SSL an toàn (nghĩa là sử dụng https thay vì http ) và đảm bảo tất cả khách truy cập sẽ chỉ truy cập vào www. địa chỉ tiền tố của trang web.

Sử dụng chuyển hướng một cách chính xác sẽ cho phép bạn tận dụng sự hiện diện trên web hiện tại của bạn đồng thời cho phép bạn sửa đổi cấu trúc trang web của bạn nếu cần. Nếu bạn muốn tìm hiểu thêm về các cách bạn có thể chuyển hướng khách truy cập của bạn , Apache có tài liệu tuyệt vời về chủ đề này trong phần mod_aliasmod_rewrite của tài liệu chính thức.


Tags:

Các tin liên quan

Cách di chuyển web root Apache đến một vị trí mới trên Debian 8
2016-12-14
Cách thiết lập mod_rewrite cho Apache trên CentOS 7
2016-10-26
Cách di chuyển web root Apache đến vị trí mới trên Ubuntu 16.04
2016-07-27
Cách thiết lập xác thực mật khẩu với Apache trên Ubuntu 16.04
2016-07-26
Cách cung cấp các ứng dụng Django với Apache và mod_wsgi trên Ubuntu 16.04
2016-05-17
Cách mã hóa kết nối Tomcat 8 với Apache hoặc Nginx trên Ubuntu 16.04
2016-04-29
Cách bảo mật Apache bằng Let's Encrypt trên Ubuntu 16.04
2016-04-21
Cách thiết lập server ảo Apache trên Ubuntu 16.04
2016-04-21
Cách tạo chứng chỉ SSL tự ký cho Apache trong Ubuntu 16.04
2016-04-21
Cách thiết lập Let's Encrypt chứng chỉ cho nhiều server ảo Apache trên Ubuntu 14.04
2016-01-19