Redirect 301 với file .htaccess (chuyển hướng 301)

Redirect 301 với file .htaccess (chuyển hướng 301)
5 (100%) 10 votes

Redirect 301 với file .htaccess (chuyển hướng 301) – Chuyển tiếp 301 nên được sử dụng khi một trang web được chuyển tới một tên miền mới để các công cụ tìm kiếm nhanh chóng cập nhật lại chỉ mục của họ và về mặt lý thuyết, nó giúp giữ nguyên thứ hạng của một trang web cụ thể nào đó sau khi thay đổi đường dẫn. Còn trên thực tế, một điều có thể chắc chắn là nó giúp bạn không mất traffic và người đọc không bị rơi vào trang báo lỗi 404.

301 redirect” là một phương pháp chuyển tiếp thông báo các trình duyệt và các công cụ tìm kiếm rằng trang webpage hoặc website đó đã được di dời hoàn toàn đến một địa chỉ mới. Thông thường một chuyển tiếp 301 sẽ có chứa địa chỉ web mới thay thế. Trình duyệt sẽ tự động theo chuyển tiếp 301 chuyển tới địa chỉ mới mà không cần đến sự can thiệp của người dùng. Sau đây PhonuiIT.com sẽ hướng dẫn các bạn cấu hình.

Cấu Hình 301 Redirect

Điều đầu tiên là bạn phải đảm bào chắc chắn server Apache của bạn hỗ trợ mod_rewrite cho phép sử dụng .htaccess để áp dụng redirect 301.
Redirect (chuyển hướng) từ tên miền cũ sang tên miền mới
Tạo một file .htaccess với đoạn code bên dưới,điều đó đảm bảo rằng tất cả các thư mục và các trang web trên tên miền cũ sẽ được chuyển hướng sang tên miền mới. Tập tin.htaccess phải được đặt trong thư mục gốc của trang web cũ của bạn.
Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.seochuyennghiep.com/$1 [R=301,L]
Sử dụng www hay non-www
Sử dụng www
  Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.seochuyennghiep.\.com$ [NC]
RewriteRule ^(.*)$ http://www.seochuyennghiep.com/$1 [R=301,L]
Non-www
 Options +FollowSymLinks
 RewriteEngine On
 RewriteBase /
 RewriteCond %{HTTP_HOST} !^seochuyennghiep\.com$ [NC]
 RewriteRule ^(.*)$ http://seochuyennghiep.com/$1 [R=301,L]
Chuyển hướng URL trên các máy chủ khác nhau.
IIS redirect:
Trong phần quản trị dịch vụ internet, nhấn phải chuột chọn tệp tin và thư mục mà bạn muốn áp dụng redirect;
Chon nút “a redirection to a URL”;
Chọn trang Redirection;
Chon tiếp “The exact url entered above” và “A permanent redirection for this resource”;
Chon “Apply”.
ColdFusion Redirect:
<.cfheader statuscode=”301″ statustext=”Moved permanently”>
<.cfheader name=”Location” value=”http://phonuiit.com/”>
PHP Redirect:
Header( “HTTP/1.1 301 Moved Permanently” );
Header( “Location: http://phonuiit.com/” );
?>
ASP Redirect:
<%@ Language=VBScript %>
<%
Response.Status=”301 Moved Permanently”
Response.AddHeader “Location”,”http://phonuiit.com/”
%>
ASP.NET Redirect:
 
< script runat=”server”>
private void Page_Load(object sender, System.EventArgs e) {
Response.Status = “301 Moved Permanently”;
Response.AddHeader(“Location”,”http://phonuiit.com/”);
}
< / script >
JSP (Java) Redirect:
<%
response.setStatus(301);
response.setHeader( “Location”, “http://phonuiit.com/” );
response.setHeader( “Connection”, “close” );
%>
CGI PERL Redirect:
$q = new CGI;
print $q->redirect(“http://phonuiit.com/”);
 
Ruby on Rails Redirect:
def old_action
headers[“Status”] = “301 Moved Permanently”
redirect_to “http://phonuiit.com/”
end

Lưu ý: Thay đổi phonuiit.com bằng tên miền của bạn

Bổ sung:

Dòng lệnh bắt đầu .htaccess

Dòng lệnh .htaccess của bạn nên bắt đầu như sau :
Options +FollowSymLinks

RewriteEngine On
RewriteBase /

Dòng lệnh cơ bản redirect 301

Dòng lệnh redirect 301 về cơ bản có dạng như sau trong tệp tin .htaccess :
redirect 301 /old/old.htm http://www.phonuiit.com/new.htm
Dòng lệnh trên thông báo chuyển rời tệp tin old.htm trong thư mục old đến vị trí mới tại http://www.phonuiit.com/new.htm.
Chú ý : Để bắt đầu thì bạn nên redirect 301 các trang trên cũng host, bạn chỉ nên chuyển các trang cũ đến thư mục gốc tương đối. Có thể thực hiện việc này bằng việc loại bỏ “http://www.phonuiit.com/” mà chỉ thêm đường dẫn tương đối đến thư mục gốc.
Điểm mạnh nhât của việc thay đổi hàng loạt đường dẫn URL chính là mod_rewrite của Apache, đặc biệt là khi thay đổi tên miền hay thư mục
hay số lượng lớn các tập tin. Chúng ta hãy tìm hiểu phần tiếp theo.

Chuyển toàn bộ đến tên miền mới

Nếu bạn quyết định thay đổi tên miền thì các đường dẫn trước đây từ các website bên ngoài, từ máy tìm kiếm và ngay cả các đường dẫn tuyệt đối trên website cũ đều bị thay đổi và khi bạn truy cập, các địa chỉ trên sẽ trỏ bạn đến trang báo lỗi 404 : trang không tìm thấy.
Vì thế nếu bạn thay đổi tên miền thì đừng để mất các liên kết quí báu và người dùng tiềm năng từ máy tìm kiếm, hãy redirect các liên kết cũ tới tên miền mới :
Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.phonuiit.com/$1 [R=301,L]
Hãy thay đổi www.phonuiit.com bằng tên miền mới của bạn.

Redirect toàn bộ trang trong một thư mục đến một trang mới

Giả sử như bạn không còn sử dụng thư mục “thuthuat” nữa và muốn chuyển tất cả các trang trong thư mục này đến trang “blogthuthuat.php” thì hãy thêm dòng lệnh sau vào tệp tin .htaccess nằm tại thư mục gốc :

RewriteRule ^thuthuat(.*)$ /blogthuthuat.php [L,R=301]

Chuyển các trang động tới một trang mới

Để chuyến trang web động page.php?id=n (với n là giá trị biến) tới một trang tĩnh mới new-page.html thì bạn có thể làm như sau :
RewriteRule ^page.php?id=(.*)$ /new-page.htm [L,R=301]

URL với www hay không www

Đôi khi các bạn bắt gặp việc website sử dụng “www” trong URL (Ví dụ http://www.phonuiit.com), trong khi có những website lại không dùng “www” này như http://mostvn.com Nên nhớ rằng “tương ứng” với dịch vụ Web. Các bạn có thể lựa chọn riêng cho mình. Nhưng không thể chọn cả hai vì sẽ gây ra trùng lặp nội dung. sau đây là hai ví dụ, hướng dẫn bạn sủ lý triệt để vấn đề này.

Trường hợp sử dụng www

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.phonuiit.\.com$ [NC]
RewriteRule ^(.*)$ http://www.phonuiit.com/$1 [R=301,L]
Ngoài ra còn có cách viết sau có thể áp dụng cho tất cả các host và domain, không phải edit lại :
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.[a-z-]+\.[a-z]{2,6} [NC]
RewriteCond %{HTTP_HOST} ([a-z-]+\.[a-z]{2,6})$     [NC]
RewriteRule ^/(.*)$ http://%1/$1 [R=301,L]

Trường hợp không sử dụng www

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^phonuiit\.com$ [NC]
RewriteRule ^(.*)$ http://phonuiit.com/$1 [R=301,L]
Bạn có thể thử lại với các tên miền ví dụ trên mà tớ áp dụng thành công đúng như trích dẫn.

Loại bỏ Query_String

Đôi khi một trang web của bạn có thể hiển thị hai đường dẫn url khác nhưng ( cùng một nội dung) ví dụ seo-tools.php và seo-tools.php?v=mobile. Tương tự như phần trên, điều này sẽ tạp ra nội dung trùng lặp trên website của bạn. Vì vậy bạn có thể loại bỏ các tham biến như sau :
RewriteCond %{THE_REQUEST} ^GET\ /.*\;.*\ HTTP/
RewriteCond %{QUERY_STRING} !^$
RewriteRule .* http://www.phonuiit.com%{REQUEST_URI}? [R=301,L]
Ngoài ra nếu như tham biến QUERY_STRING không được gấn giá trị nào hết và URl kết thúc bởi biến rỗng “?”, thì bạn nên loại bỏ chúng, ví dụ “index.php?” :
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} .
RewriteRule ^index.php /index.php? [L]

Chuyển phần đuôi mở rộng từ .php sang .html

Việc chuyển .php sang .html có tác dụng khi bạn cần viết lại đường dẫn thân thiện với máy tìm kiếm (Friendly URL for SEO).
RewriteRule ^(.*)\.html$ $1.php [R=301,L]

Chuyển gạch dưới (_) thành gạch ngang(-)

Dù Google mới chấp nhận việc sử dụng gạch dưới “_” như là ký tự ngăn cách, nhưng trong thực tế người dùng vẫn quen thuộc với dấu gạch ngang “-”. Bản thân tôi cũng ủng hộ dấu gạch ngang vì nó dễ nhìn hơn. Bạn có thể chuyển đổi toàn bộ dấu “_” sang “-” như sau :
Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteRule !\.(html|php)$ - [S=4]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4-$5 [E=uscor:Yes]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4 [E=uscor:Yes]
RewriteRule ^([^_]*)_([^_]*)_(.*)$ $1-$2-$3 [E=uscor:Yes]
RewriteRule ^([^_]*)_(.*)$ $1-$2 [E=uscor:Yes]

RewriteCond %{ENV:uscor} ^Yes$
RewriteRule (.*) http://www.phonuiit.com/$1 [R=301,L]

Redirect WordPress Feeds tới Feedburner

Trong bài viết sử dụng Feedbuner, các bạn có thể sử dụng plugin để quản lý Feeds RSS trên Blog WordPress. Nếu không các bạn có thể sử dụng code htaccess sau :
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/feed\.gif$
RewriteRule .* - [L]

RewriteCond %{HTTP_USER_AGENT} !^.*(FeedBurner|FeedValidator) [NC]
RewriteRule ^feed/?.*$ http://feeds.phonuiit.com/Seo/ [L,R=302]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
Đối với người dùng WordPress, các bạn có thể sử dụng plug-in Redirection Permanent Link để chuyến hướng các trang.

Bào vệ ăn cắp tài nguyên và băng thông

Đôi khi các tài liệu, film hay hình ảnh mà bạn tải trên host của mình bị người khác dùng và đăng trên website khác sẽ gây tốn băng thông, bạn có thể hạn chế việc ăn cắp bằng cách chỉ cho phép các tài nguyên trên tiếp cận trên những website bạn cho phép như sau (Nếu không sẽ trả về thư mục /feed/) :
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?phonuiit.com/.*$ [NC]
RewriteRule \.(gif|jpg|swf|flv|png)$ /feed/ [R=302,L]

Ứng dụng redirect 301 trên các máy chủ khác (ngoài Apache)

IIS redirect

Trong phần quản trị dịch vụ internet, nhấn phải chuột chọn tệp tin và thư mục mà bạn muốn áp dụng redirect;
Chon nút “a redirection to a URL”;
Chọn trang Redirection;
Chon tiếp “The exact url entered above” và “A permanent redirection for this resource”;
Chon “Apply”.

ColdFusion Redirect

<.cfheader statuscode="301" statustext="Moved permanently">
<.cfheader name="Location" value="http://www.phonuiit.com">

PHP Redirect

<?
Header( "HTTP/1.1 301 Moved Permanently" );
Header( "Location: http://www.phonuiit.com" );
?>

ASP Redirec

<%@ Language=VBScript %>
<%
Response.Status="301 Moved Permanently"
Response.AddHeader "Location","http://www.phonuiit.com/"
%>

ASP .NET Redirect

<script runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location","http://www.phonuiit.com/");
}
</script>

JSP (Java) Redirect

<%
response.setStatus(301);
response.setHeader( "Location", "http://www.phonuiit.com/" );
response.setHeader( "Connection", "close" );
%>

CGI PERL Redirect

$q = new CGI;
print $q->redirect("http://www.phonuiit.com/");

Ruby on Rails Redirect

def old_action
headers["Status"] = "301 Moved Permanently"
redirect_to "http://www.seochuyennghiep.com/"
end
[yasr_visitor_votes size="medium"]