Share , Download , Useful

GOOGLE TRANSLATE

Subscribe to RSS feed

CEX RSS Filter

Download CEX RSS FILTER , You can make grab news from another site with layout good (w3c) : http://bit.ly/999bbS

.htaccess

.htaccess và redirect 301

Thứ năm, 08 Tháng 1 2009 13:04   


redirect 301Tệp tin htaccess là gì ?

htaccess là một tệp tin cấu hình đặc biệt, htaccess cho phép bạn thay đổi cách hoạt động của máy chủ Apache ở tầng thư mục. Tệp tin htaccess gồm các dòng lệnh, có thể tùy biến theo người dùng, được đặt trong một thư mục nào đó, nó sẽ có tác dụng cho thư mục đó và tất cả các thư mục con. Một trong những ứng dụng phổ biến của htaccess là cho phép viết lại đường dẫn URL (rewrite URL).

Trở lại ứng dụng SEO của htaccess, khi một khách hay bọ tìm kiếm thăm một trang web, máy chủ sẽ kiểm tra tệp tin đặt biệt để tìm các tùy biến của webmaster, bao gồm cả các tùy biến bảo mật. Máy chủ sau đó sẽ thực thi các lệnh tìm thấy trong tệp tin htaccess thường gồm chuyển hướng redirection, bảo mật và báo lỗi.

Redirect 301 là gì ?

Chuyển hướng redirect 301 hay redirection 301 thường được hiểu như việc di rời vĩnh viễn (moved permanently). Nó trả về mã lỗi 301 trong phần header nhằm thông báo cho máy tìm kiếm hay trình duyệt, máy chủ rằng trang web hiện tại đã được chuyển rời tới địa chỉ mới.

Cài đặt redirect 301

Điều đầu tiên là bạn phải đảm bào chắc server Apache của bạn hỗ trợ mod_rewrite cho phép sử dụng .htaccess để áp dụng redirect 301 . Sau đó bạn phải tải tệp tin .htaccess từ thư mục gốc chứa các trang web của bạn. Nếu như bạn không có tệp tin .htaccess trong thư mục gốc thì bạn phải tạo nó với trình soạn thảo text như Notepad, Ultraedit hay EditPadPro, v.v. Phải chắc chắn rằng bạn viết đúng tên và có dấu chấm “.” đầu tệp tin.

Người sử dụng Windows sẽ không thể tạo được tệp tin .htaccess vì tệp tin đặc biệt này không chứa tên, nó chỉ chứa tên của phần tên mở rộng. Vì thế bạn hãy tải tệp tin text bất kỳ trong window rồi tải lên server qua FTP rồi đổi tên trên sever.

Sau khi tải tệp tin .htaccess xuống máy, nếu đã có các dòng lệnh trước đó thì hãy cẩn thận đừng thay đổi nếu như bạn không chắc, tốt nhất hãy sao lưu một bản để phòng trường hợp cần thiết bạn vẫn có thể quay trở lại.

Cài đặt cơ bản

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.seovietnam.org/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.seovietnam.org/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.seovietnam.org/” 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.seovietnam.org/$1 [R=301,L]

Hãy thay đổi www.seovietnam.org 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 “thuthuatseo” nữa và muốn chuyển tất cả các trang trong thư mục này đến trang “seoblog.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 ^thuthuatseo(.*)$ /seoblog.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ụ như http://seovietnam.org), trong khi có những website lại không dùng “www” này như http://aevn.fr. 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\.seovietnam.\.org$ [NC]
RewriteRule ^(.*)$ http://www.seovietnam.org/$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} !^aevn\.fr$ [NC]
RewriteRule ^(.*)$ http://aevn.fr/$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.phpseo-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.seovietnam.org%{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 seovietnam 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)$ -
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.seovietnam.org/$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.seovietnam.org/quangbaweb/ [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\.)?seovietnam.org/.*$ [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.seovietnam.org">

PHP Redirect

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

ASP Redirec

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

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.seovietnam.org/");
}
</script>

JSP (Java) Redirect

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

CGI PERL Redirect

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

Ruby on Rails Redirect

def old_action
headers["Status"] = "301 Moved Permanently"
redirect_to "http://www.seovietnam.org/"
end

Theo VietSEO.net


Comments

avatar Long
0
 
 
Add vào file .htaccess rồi mà nó ko chạy bác ơi, e có sử dụng sh404sef đi kem nữa, làm sao cho nó chạy đây ?
B
i
u
Quote
Code
List
List item
URL
<form method="post" name="ccform_10" id="ccform_10" action="http://www.seovietnam.org/index2.php?option=com_chronocomments&amp;task=savecomment"> <textarea class="form-text" rows="" cols="" name="text" id="post_10_text"></textarea> <input type="text" value="" class="form-input" id="ccname_10" name="name"> Name *
<input type="text" value="" class="form-input" id="ccemail_10" name="email"> Email *
<input type="text" class="form-input" value="http://" id="ccurl_10" name="url"> URL
<input type="text" class="form-input" id="comment_captcha_10" style="width: 30%;" size="5" name="comment_captcha"> Code   
Submit Comment
Hủy
<input type="hidden" value="com_content" name="component"> <input type="hidden" value="91" name="pageid"> <input type="hidden" value="0" name="userid"> <input type="hidden" value="" name="commentid"> <input type="hidden" value="10" name="parentid"> <input type="hidden" value="1" name="fc0e891d391ee0fb02072a1bd489a2b0"> </form>
avatar SEO Việt Nam
+1
 
 
bạn vào cpanel của host, chọn redirect cho domain của bạn, sau đó mở file .htaccess ra copy đoạn mã này

Quote:

RewriteCond %{HTTP_HOST} ^seovietnam.org$
RewriteRule ^(.*)$ "http\:\/\/www\.seovietnam\.org" [R=301,L]

Vào ngay dưới dòng lệnh : RewriteEngine On
Nhớ là file .htaccess là của sh404sef đó nhá.
B
i
u
Quote
Code
List
List item
URL
<form method="post" name="ccform_11" id="ccform_11" action="http://www.seovietnam.org/index2.php?option=com_chronocomments&amp;task=savecomment"> <textarea class="form-text" rows="" cols="" name="text" id="post_11_text"></textarea> <input type="text" value="" class="form-input" id="ccname_11" name="name"> Name *
<input type="text" value="" class="form-input" id="ccemail_11" name="email"> Email *
<input type="text" class="form-input" value="http://" id="ccurl_11" name="url"> URL
<input type="text" class="form-input" id="comment_captcha_11" style="width: 30%;" size="5" name="comment_captcha"> Code   
Submit Comment
Hủy
<input type="hidden" value="com_content" name="component"> <input type="hidden" value="91" name="pageid"> <input type="hidden" value="0" name="userid"> <input type="hidden" value="" name="commentid"> <input type="hidden" value="11" name="parentid"> <input type="hidden" value="1" name="fc0e891d391ee0fb02072a1bd489a2b0"> </form>
avatar Giai Tri
+1
 
 
bài viết hay thank,
B
i
u
Quote
Code
List
List item
URL
<form method="post" name="ccform_16" id="ccform_16" action="http://www.seovietnam.org/index2.php?option=com_chronocomments&amp;task=savecomment"> <textarea class="form-text" rows="" cols="" name="text" id="post_16_text"></textarea> <input type="text" value="" class="form-input" id="ccname_16" name="name"> Name *
<input type="text" value="" class="form-input" id="ccemail_16" name="email"> Email *
<input type="text" class="form-input" value="http://" id="ccurl_16" name="url"> URL
<input type="text" class="form-input" id="comment_captcha_16" style="width: 30%;" size="5" name="comment_captcha"> Code   
Submit Comment
Hủy
<input type="hidden" value="com_content" name="component"> <input type="hidden" value="91" name="pageid"> <input type="hidden" value="0" name="userid"> <input type="hidden" value="" name="commentid"> <input type="hidden" value="16" name="parentid"> <input type="hidden" value="1" name="fc0e891d391ee0fb02072a1bd489a2b0"> </form>
avatar Hoang Linh
0
 
 
khá hay
B
i
u
Quote
Code
List
List item
URL
<form method="post" name="ccform_43" id="ccform_43" action="http://www.seovietnam.org/index2.php?option=com_chronocomments&amp;task=savecomment"> <textarea class="form-text" rows="" cols="" name="text" id="post_43_text"></textarea> <input type="text" value="" class="form-input" id="ccname_43" name="name"> Name *
<input type="text" value="" class="form-input" id="ccemail_43" name="email"> Email *
<input type="text" class="form-input" value="http://" id="ccurl_43" name="url"> URL
<input type="text" class="form-input" id="comment_captcha_43" style="width: 30%;" size="5" name="comment_captcha"> Code   
Submit Comment
Hủy
<input type="hidden" value="com_content" name="component"> <input type="hidden" value="91" name="pageid"> <input type="hidden" value="0" name="userid"> <input type="hidden" value="" name="commentid"> <input type="hidden" value="43" name="parentid"> <input type="hidden" value="1" name="fc0e891d391ee0fb02072a1bd489a2b0"> </form>
avatar Thế Hồng
0
 
 
SEOVN xem giùm tôi đoạn code này http://toila.net/mod_rewrite-chong-bot-va-flood, chỗ ghi chú, # I do not know why [L,QSA,R=403] does not work. Thật sự tôi không hiểu vì sao nó không hoạt động.

Thanks
B
i
u
Quote
Code
List
List item
URL
<form method="post" name="ccform_405" id="ccform_405" action="http://www.seovietnam.org/index2.php?option=com_chronocomments&amp;task=savecomment"> <textarea class="form-text" rows="" cols="" name="text" id="post_405_text"></textarea> <input type="text" value="" class="form-input" id="ccname_405" name="name"> Name *
<input type="text" value="" class="form-input" id="ccemail_405" name="email"> Email *
<input type="text" class="form-input" value="http://" id="ccurl_405" name="url"> URL
<input type="text" class="form-input" id="comment_captcha_405" style="width: 30%;" size="5" name="comment_captcha"> Code   
Submit Comment
Hủy
<input type="hidden" value="com_content" name="component"> <input type="hidden" value="91" name="pageid"> <input type="hidden" value="0" name="userid"> <input type="hidden" value="" name="commentid"> <input type="hidden" value="405" name="parentid"> <input type="hidden" value="1" name="fc0e891d391ee0fb02072a1bd489a2b0"> </form>
avatar SEO
0
 
 
Minh không hiểu QSA là gì ?
Nhưng nếu chỉ để chuyển hướng về 403.php thì đâu cần phức tạp vậy đâu cậu.

P/s: cái captcha của cậu có vấn đề, ko thể comment được
B
i
u
Quote
Code

.htaccess

.htaccess và redirect 301

Thứ năm, 08 Tháng 1 2009 13:04   


redirect 301Tệp tin htaccess là gì ?

htaccess là một tệp tin cấu hình đặc biệt, htaccess cho phép bạn thay đổi cách hoạt động của máy chủ Apache ở tầng thư mục. Tệp tin htaccess gồm các dòng lệnh, có thể tùy biến theo người dùng, được đặt trong một thư mục nào đó, nó sẽ có tác dụng cho thư mục đó và tất cả các thư mục con. Một trong những ứng dụng phổ biến của htaccess là cho phép viết lại đường dẫn URL (rewrite URL).

Trở lại ứng dụng SEO của htaccess, khi một khách hay bọ tìm kiếm thăm một trang web, máy chủ sẽ kiểm tra tệp tin đặt biệt để tìm các tùy biến của webmaster, bao gồm cả các tùy biến bảo mật. Máy chủ sau đó sẽ thực thi các lệnh tìm thấy trong tệp tin htaccess thường gồm chuyển hướng redirection, bảo mật và báo lỗi.

Redirect 301 là gì ?

Chuyển hướng redirect 301 hay redirection 301 thường được hiểu như việc di rời vĩnh viễn (moved permanently). Nó trả về mã lỗi 301 trong phần header nhằm thông báo cho máy tìm kiếm hay trình duyệt, máy chủ rằng trang web hiện tại đã được chuyển rời tới địa chỉ mới.

Cài đặt redirect 301

Điều đầu tiên là bạn phải đảm bào chắc server Apache của bạn hỗ trợ mod_rewrite cho phép sử dụng .htaccess để áp dụng redirect 301 . Sau đó bạn phải tải tệp tin .htaccess từ thư mục gốc chứa các trang web của bạn. Nếu như bạn không có tệp tin .htaccess trong thư mục gốc thì bạn phải tạo nó với trình soạn thảo text như Notepad, Ultraedit hay EditPadPro, v.v. Phải chắc chắn rằng bạn viết đúng tên và có dấu chấm “.” đầu tệp tin.

Người sử dụng Windows sẽ không thể tạo được tệp tin .htaccess vì tệp tin đặc biệt này không chứa tên, nó chỉ chứa tên của phần tên mở rộng. Vì thế bạn hãy tải tệp tin text bất kỳ trong window rồi tải lên server qua FTP rồi đổi tên trên sever.

Sau khi tải tệp tin .htaccess xuống máy, nếu đã có các dòng lệnh trước đó thì hãy cẩn thận đừng thay đổi nếu như bạn không chắc, tốt nhất hãy sao lưu một bản để phòng trường hợp cần thiết bạn vẫn có thể quay trở lại.

Cài đặt cơ bản

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.seovietnam.org/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.seovietnam.org/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.seovietnam.org/” 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.seovietnam.org/$1 [R=301,L]

Hãy thay đổi www.seovietnam.org 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 “thuthuatseo” nữa và muốn chuyển tất cả các trang trong thư mục này đến trang “seoblog.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 ^thuthuatseo(.*)$ /seoblog.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ụ như http://seovietnam.org), trong khi có những website lại không dùng “www” này như http://aevn.fr. 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\.seovietnam.\.org$ [NC]
RewriteRule ^(.*)$ http://www.seovietnam.org/$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} !^aevn\.fr$ [NC]
RewriteRule ^(.*)$ http://aevn.fr/$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.phpseo-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.seovietnam.org%{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 seovietnam 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)$ -
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.seovietnam.org/$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.seovietnam.org/quangbaweb/ [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\.)?seovietnam.org/.*$ [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.seovietnam.org">

PHP Redirect

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

ASP Redirec

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

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.seovietnam.org/");
}
</script>

JSP (Java) Redirect

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

CGI PERL Redirect

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

Ruby on Rails Redirect

def old_action
headers["Status"] = "301 Moved Permanently"
redirect_to "http://www.seovietnam.org/"
end

Theo VietSEO.net


Comments

avatar Long
0
 
 
Add vào file .htaccess rồi mà nó ko chạy bác ơi, e có sử dụng sh404sef đi kem nữa, làm sao cho nó chạy đây ?
B
i
u
Quote
Code
List
List item
URL
<form method="post" name="ccform_10" id="ccform_10" action="http://www.seovietnam.org/index2.php?option=com_chronocomments&amp;task=savecomment"> <textarea class="form-text" rows="" cols="" name="text" id="post_10_text"></textarea> <input type="text" value="" class="form-input" id="ccname_10" name="name"> Name *
<input type="text" value="" class="form-input" id="ccemail_10" name="email"> Email *
<input type="text" class="form-input" value="http://" id="ccurl_10" name="url"> URL
<input type="text" class="form-input" id="comment_captcha_10" style="width: 30%;" size="5" name="comment_captcha"> Code   
Submit Comment
Hủy
<input type="hidden" value="com_content" name="component"> <input type="hidden" value="91" name="pageid"> <input type="hidden" value="0" name="userid"> <input type="hidden" value="" name="commentid"> <input type="hidden" value="10" name="parentid"> <input type="hidden" value="1" name="fc0e891d391ee0fb02072a1bd489a2b0"> </form>
avatar SEO Việt Nam
+1
 
 
bạn vào cpanel của host, chọn redirect cho domain của bạn, sau đó mở file .htaccess ra copy đoạn mã này

Quote:

RewriteCond %{HTTP_HOST} ^seovietnam.org$
RewriteRule ^(.*)$ "http\:\/\/www\.seovietnam\.org" [R=301,L]

Vào ngay dưới dòng lệnh : RewriteEngine On
Nhớ là file .htaccess là của sh404sef đó nhá.
B
i
u
Quote
Code
List
List item
URL
<form method="post" name="ccform_11" id="ccform_11" action="http://www.seovietnam.org/index2.php?option=com_chronocomments&amp;task=savecomment"> <textarea class="form-text" rows="" cols="" name="text" id="post_11_text"></textarea> <input type="text" value="" class="form-input" id="ccname_11" name="name"> Name *
<input type="text" value="" class="form-input" id="ccemail_11" name="email"> Email *
<input type="text" class="form-input" value="http://" id="ccurl_11" name="url"> URL
<input type="text" class="form-input" id="comment_captcha_11" style="width: 30%;" size="5" name="comment_captcha"> Code   
Submit Comment
Hủy
<input type="hidden" value="com_content" name="component"> <input type="hidden" value="91" name="pageid"> <input type="hidden" value="0" name="userid"> <input type="hidden" value="" name="commentid"> <input type="hidden" value="11" name="parentid"> <input type="hidden" value="1" name="fc0e891d391ee0fb02072a1bd489a2b0"> </form>
avatar Giai Tri
+1
 
 
bài viết hay thank,
B
i
u
Quote
Code
List
List item
URL
<form method="post" name="ccform_16" id="ccform_16" action="http://www.seovietnam.org/index2.php?option=com_chronocomments&amp;task=savecomment"> <textarea class="form-text" rows="" cols="" name="text" id="post_16_text"></textarea> <input type="text" value="" class="form-input" id="ccname_16" name="name"> Name *
<input type="text" value="" class="form-input" id="ccemail_16" name="email"> Email *
<input type="text" class="form-input" value="http://" id="ccurl_16" name="url"> URL
<input type="text" class="form-input" id="comment_captcha_16" style="width: 30%;" size="5" name="comment_captcha"> Code   
Submit Comment
Hủy
<input type="hidden" value="com_content" name="component"> <input type="hidden" value="91" name="pageid"> <input type="hidden" value="0" name="userid"> <input type="hidden" value="" name="commentid"> <input type="hidden" value="16" name="parentid"> <input type="hidden" value="1" name="fc0e891d391ee0fb02072a1bd489a2b0"> </form>
avatar Hoang Linh
0
 
 
khá hay
B
i
u
Quote
Code
List
List item
URL
<form method="post" name="ccform_43" id="ccform_43" action="http://www.seovietnam.org/index2.php?option=com_chronocomments&amp;task=savecomment"> <textarea class="form-text" rows="" cols="" name="text" id="post_43_text"></textarea> <input type="text" value="" class="form-input" id="ccname_43" name="name"> Name *
<input type="text" value="" class="form-input" id="ccemail_43" name="email"> Email *
<input type="text" class="form-input" value="http://" id="ccurl_43" name="url"> URL
<input type="text" class="form-input" id="comment_captcha_43" style="width: 30%;" size="5" name="comment_captcha"> Code   
Submit Comment
Hủy
<input type="hidden" value="com_content" name="component"> <input type="hidden" value="91" name="pageid"> <input type="hidden" value="0" name="userid"> <input type="hidden" value="" name="commentid"> <input type="hidden" value="43" name="parentid"> <input type="hidden" value="1" name="fc0e891d391ee0fb02072a1bd489a2b0"> </form>
avatar Thế Hồng
0
 
 
SEOVN xem giùm tôi đoạn code này http://toila.net/mod_rewrite-chong-bot-va-flood, chỗ ghi chú, # I do not know why [L,QSA,R=403] does not work. Thật sự tôi không hiểu vì sao nó không hoạt động.

Thanks
B
i
u
Quote
Code
List
List item
URL
<form method="post" name="ccform_405" id="ccform_405" action="http://www.seovietnam.org/index2.php?option=com_chronocomments&amp;task=savecomment"> <textarea class="form-text" rows="" cols="" name="text" id="post_405_text"></textarea> <input type="text" value="" class="form-input" id="ccname_405" name="name"> Name *
<input type="text" value="" class="form-input" id="ccemail_405" name="email"> Email *
<input type="text" class="form-input" value="http://" id="ccurl_405" name="url"> URL
<input type="text" class="form-input" id="comment_captcha_405" style="width: 30%;" size="5" name="comment_captcha"> Code   
Submit Comment
Hủy
<input type="hidden" value="com_content" name="component"> <input type="hidden" value="91" name="pageid"> <input type="hidden" value="0" name="userid"> <input type="hidden" value="" name="commentid"> <input type="hidden" value="405" name="parentid"> <input type="hidden" value="1" name="fc0e891d391ee0fb02072a1bd489a2b0"> </form>
avatar SEO
0
 
 
Minh không hiểu QSA là gì ?
Nhưng nếu chỉ để chuyển hướng về 403.php thì đâu cần phức tạp vậy đâu cậu.

P/s: cái captcha của cậu có vấn đề, ko thể comment được
B
i
u
Quote
Code

Jquery-Mootool Conflict

Tìm hiểu quy trình làm việc trên file trong PHP

Một trong những tác vụ đặc biệt của PHP đó là cho phép xử lý dữ liệu trực tiếp thông qua quá trình nhận và đọc nội dung trên 1 file dữ liệu. Điều này giúp cho PHP trở nên tinh tế và dễ tùy biến hơn khi xử lý 1 lượng dữ liệu có quy mô lớn. Việc thao tác mở, đọc, ghi, đóng file này cũng có ý nghĩa tuần tự như bạn đang làm việc trực tiếp trên 1 file dữ liệu thực thụ.



1- Đóng, mở 1 file trong PHP:
 
Để mở 1 file ta sử dụng cú pháp sau: fopen("Đường dẫn", thuộc tính).
Trong đó Đường dẫn chính là đường dẫn tới file cần mở.
Thuộc tính bao gồm các quyền hạn cho phép thao tác trên file đó như thế nào.
Các thuộc tính cơ bản :
 
PHP Example
 
Ví dụ:
 

$fp=fopen("test.txt",r)or exit("khong tim thay file can mo");
?>
Tương tự như thế, để đóng 1 file ta có cú pháp như sau: fclose(file vừa mở)
 
Ví dụ:
 

$fp=fopen("test.txt",r)or exit("khong tim thay file can mo");
fclose($fp);
?>
 
 
Việc mở và đóng này không có ý nghĩa là chúng đã được đọc. Muốn đọc được nội dung của file chúng ta lại tiếp tục với thao tác lấy dữ liệu từ file nữa.
 
2- Đọc và ghi file trong PHP.
 
a) Đọc 1 file trong PHP
 
PHP cho ta nhiều sự lựa chọn trong việc đọc 1 file. Có nhiều hình thức hỗ trợ nhưng hiện nay 2 hình thức phổ biến nhất vẫn là đọc file theo từng dòng và đọc file theo từng ký tự.
 
- Đọc file theo từng dòng:
 
Cú pháp : fgets(file vừa mở).
 
Ví dụ:
 

$fp=fopen("test.txt",r)or exit("khong tim thay file can mo");
echo fgets($fp);
fclose($fp);
?>
 
 
- Đọc file theo từng ký tự:
 
Cú pháp : fgetc(file vừa mở).
 
Ví dụ:
 

$fp=fopen("test.txt",r)or exit("khong tim thay file can mo");
echo fgetc($fp);
fclose($fp);
?>
 
 
Quy trình đọc sẽ diễn ra theo từng yêu cầu của cú pháp sử dụng. Nhưng sẽ có sự ràng buộc bởi việc kiểm tra đã đến cuối file chưa ?.
 
Ở đây chúng ta dùng cú pháp sau: feof(file vừa mở)
Ví dụ:
 

$fp=fopen("test.txt",r)or exit("khong tim thay file can mo");
while(!feof($fp))
{
echo fgets($fp);
}
fclose($fp);
?>

b) Ghi 1 file trong PHP
PHP cung cấp cho ta 1 cú pháp nhỏ để ghi dữ liệu vào 1file
Cú pháp cơ bản : fwrite("file vừa mở", "Nội dung cần ghi vào file")

Ví dụ:
 




$fp=fopen("test.txt",a)or exit("khong tim thay file can mo");
$news="Trung Tam Tin hoc Viet Chuyenn";
fwrite($fp,$news);
fclose($fp);
?>

Tổng kết:

Việc sử dụng file một cách thành thạo sẽ giúp bạn dễ dàng vận hành các ứng dụng mang quy mô vừa và nhỏ như: website nhiều ngôn ngữ, bộ đếm,…và cả những công nghệ web mới như XML một cách dễ dàng. Qua bài học này chúng ta cũng hiểu được nguyên lý hoạt động, trình tự xử lý 1 file dữ liệu khi chúng được triệu gọi trong tài liệu PHP.
 
Bài tập áp dụng:
 
Xây dựng bộ đếm cho website, mỗi khi khách truy cập thì sẽ tự động tăng lên 1 giá trị.
 

Khái niệm cơ bản về Cookie và session trong PHP

Cookie và session là hai phương pháp sử dụng để quản lý các phiên làm việc giữa người sử dụng và hệ thống. Việc quản lý phiên làm việc này sẽ giúp bạn tạo ra sự chứng thực hiệu quả bởi việc xác nhận thông tin trước khi truy cập vào một phân vùng cố định. Ngoài ra, việc quản lý tốt phiên làm việc cũng giúp người truy cập cảm thấy dễ dàng sử dụng dịch vụ của trang web cho những lần truy cập sau. Bởi cớ chế quản lý phiên làm việc ghi nhận lại quá trình truy cập của người sử dụng khi họ thăm viếc trang web của bạn lần đầu.

1- Tổng quan về cookie:

Cookie là 1 đoạn dữ liệu được ghi vào đĩa cứng hoặc bộ nhớ của máy người sử dụng. Nó được trình duyệt gởi ngược lên lại server mỗi khi browser tải 1 trang web từ server.
Những thông tin được lưu trữ trong cookie hoàn toàn phụ thuộc vào website trên server. Mỗi website có thể lưu trữ những thông tin khác nhau trong cookie, ví dụ thời điểm lần cuối ta ghé thăm website, đánh dấu ta đã login hay chưa, v.v...
Cookie được tạo ra bởi website và gởi tới browser, do vậy 2 website khác nhau (cho dù cùng host trên 1 server) sẽ có 2 cookie khác nhau gởi tới browser. Ngoài ra, mỗi browser quản lý và lưu trữ cookie theo cách riêng của mình, cho nên 2 browser cùng truy cập vào 1 website sẽ nhận được 2 cookie khác nhau.

a -Thiết lập cookie:

Để thiết lập cookie ta sử dụng cú pháp:
Setcookie("tên cookie","giá trị", thời gian sống)
Tên cookie là tên mà chúng ta đặt cho phiên làm việc.
Giá trị là thông số của tên cookie.
Ví dụ:

Setcookie("username","admin", time() +3600)
Như ví dụ trên ta thấy với tên là username và giá trị là admin, có thời gian sống là 1 giờ tính từ thời điểm thiết lập.
Chú ý: Kịch bản cookie phải đặt trên mọi giá trị trả về bao gồm thẻ HTML và lệnh echo.
Kịch bản cookie phải đặt trên mọi giá trị trả về bao gồm thẻ HTML và lệnh echo. b - Sử dụng cookie:
Để sử dụng lại cookie vừa thiết lập, chúng ta sử dụng cú pháp:
Cú pháp: $_COOKIE["tên cookies"]
Tên cookie là tên mà chúng ta thiết lập phía trên.
Ví dụ:

Tạo trang cookie.php với nội dung sau:


<?php
setcookie("name","Kenny Huy",time() + 3600);
?>
<html>
<head>
<title>Test page 1</title></head>
<body>
<b><a href=cookie2.php>Click here</a></b>
</body>
</html>

Tiếp tục tạo trang cookie2.php với nội dung sau:


<html>
<head><title>Result Page</title></head>
<body>
<?php
echo "Ten cua ban la <b>".$_COOKIE['name']."</b>";
?>
</body>
</html>

c- Hủy Cookie:

Để hủy 1 cookie đã được tạo ta có thể dùng 1 trong 2 cách sau:
+ Cú pháp: setcookie("Tên cookie")
Gọi hàm setcookie với chỉ duy nhất tên cookie mà thôi
+ Dùng thời gian hết hạn cookie là thời điểm trong quá khứ.
Ví dụ: setcookie("name","Kenny Huy",time()-3600);
Ví dụ:

Tiếp tục tạo trang cookie3.php với nội dung sau:


<?php
setcookie("name","Kenny Huy",time()-360);
?>
<html>
<head>
<title>Test page 1</title></head>
<body>
<b><a href=cookie2.php>Click here</a></b>
</body>
</html>

2- Tổng quan về session:

Một cách khác quản lý người sử dụng là session. Session được hiểu là khoảng thời gian người sử dụng giao tiếp với 1 ứng dụng. Một session được bắt đầu khi người sử dụng truy cập vào ứng dụng lần đầu tiên, và kết thúc khi người sử dụng thoát khỏi ứng dụng. Mỗi session sẽ có được cấp một định danh (ID) khác nhau và nội dung được lưu trong thư mục thiết lập trong file php.ini (tham số session.save_path).
a- Thiết lập session:
Để thiết lập 1 session ta sử dụng cú pháp: session_start()
Đoạn code này phải được nằm trên các kịch bản HTML. Hoặc những lệnh echo, printf.
Để thiết lập 1 giá trị session, ngoài việc cho phép bắt đầu thực thi session. Chúng ta còn phải đăng ký 1 giá trị session. Để tiện cho việc gán giá trị cho session đó.
Ta có cú pháp sau: session_register("Name")

Ví dụ:


<?php
Session_start();
Session_register("username");
?>

b- Sử dụng giá trị của session:

Giống với cookie. Để sử dụng giá trị của session ta sử dụng mã lệnh sau:
Cú pháp: $_SESSION["name"]
$_SESSION["name"] Với Name là tên mà chúng ta sử dụng hàm session_register("name") để khai báo.

Ví dụ:

Tạo trang session.php với nội dung sau:


<?php
session_start();
session_register("name");
$_SESSION["name"] = "Kenny Huy";
?>
<html>
<head>
<title>Test page 1</title></head>
<body>
<b><a href=session2.php>Click here</a></b>
</body>
</html>

Tạo trang session2.php với nội dung sau:


<?
session_start();
?>
<html>
<head><title>Result Page</title></head>
<body>
<?php
echo "Ten cua ban la <b>".$_SESSION["name"]."</b>";
?>
</body>
</html>

c- Hủy bỏ session:

Để hủy bỏ giá trị của session ta có những cách sau:
session_destroy() // Cho phép hủy bỏ toàn bộ giá trị của session
session_unset()// Cho phép hủy bỏ session .
Ví dụ:

Tạo trang session3.php với nội dung sau:


<?php
session_start();
session_destroy();
?>
<html>
<head>
<title>Test page 1</title></head>
<body>
<b><a href=session2.php>Click here</a></b>
</body>
</html>

3- Tổng Kết:

Sau bài học này chúng ta đã nắm được cách điều khiển phiên làm việc giữa cookie và session. Sử dụng chúng trong từng trường hợp cụ thể. Từ đó có thể áp dụng để viết những ứng dụng nhỏ như kiểm soát người đăng nhập, làm giỏ hàng online,…..

Bài tập áp dụng:

Xây dựng website sử dụng tính năng session thỏa mãn những yêu cầu sau:
1- Tạo trang đăng nhập với username/password là : admin/vietchuyen. Nếu user đăng nhập thành công thì sẽ xuất ra dòng welcome, admin.
2- Tạo trang đăng xuất thoát khỏi phần quản trị

Cắt chuỗi không bị mất từ

Học PHP qua Ví Dụ - Cắt chuỗi không bị mất từ
Thứ bảy, ngày 02 tháng một năm 2010
Lấy mục Previous Post của Blog này làm ví dụ: một số tiêu đề bài viết đã được rút ngắn và thêm vào "..." để đảm bảo không có tiêu đề nào "lấn sân" tới dòng thứ 4 . Chúng ta dùng substr() để cắt chuỗi ở 1 giới hạn qui định nào đó, nhưng bằng cách nào để cắt chuỗi mà từ cuối cùng của chuỗi cắt ra luôn là 1 từ có nghĩa.


$string ="hôm nay chúng ta nghỉ cả ngày, các bạn có định đi chơi không hay đi ngủ";
echo 
substr($string,0,35);
// hôm nay chúng ta nghỉ cả ngà 


nếu cắt chuỗi như bình thường, thì chữ ngày trong chuỗi ban đầu đã bị cắt mất chữ y vì PHP thay trời hành đạo cắt đúng ngay vị trí thứ 35 trong chuỗi. Chúng ta cần mời luật sư để bỏ nhỏ với ông PHP cắt chuỗi sao cho nó đẹp đẹp, không bị mất chữ ở từ cuối cùng trong chuỗi nữa.

Hiểu nôm na rằng, PHP qui định 1 từ sẽ được kết thúc bằng 1 hoặc nhiều kí tự khoảng trắng. Vì vậy chúng ta cần xác định xem vị trí của kí tự khoảng trắng đầu tiên trong chuỗi ban đầu từ chỗ định cắt là như thế nào: nếu vị trí khoảng trắng đó lớn hơn số kí tự mình dự định cắt ra thì nghĩa là tại ví trí cắt chưa kết thúc 1 từ, chúng ta cần cắt chuỗi tại ngay vị trí khoảng trắng đó, trường hợp còn lại thì không ảnh hưởng gì tới kết quả.

Để tìm vị trí khoảng trắng, ta dùng hàm strpos()


// function catchuoi() 2 tham số: chuỗi input và vị trí cắt
function catchuoi($chuoi,$gioihan){
    
// nếu độ dài chuỗi nhỏ hơn hay bằng vị trí cắt
    // thì không thay đổi chuỗi ban đầu
    
if(strlen($chuoi)<=$gioihan)
    {
        return 
$chuoi;
    }
    else{
        
/* 
        so sánh vị trí cắt 
        với kí tự khoảng trắng đầu tiên trong chuỗi ban đầu tính từ vị trí cắt
        nếu vị trí khoảng trắng lớn hơn
        thì cắt chuỗi tại vị trí khoảng trắng đó
        */
        
if(strpos($chuoi," ",$gioihan) > $gioihan){
            
$new_gioihan=strpos($chuoi," ",$gioihan);
            
$new_chuoi substr($chuoi,0,$new_gioihan)."...";
            return 
$new_chuoi;
        }
        
// trường hợp còn lại không ảnh hưởng tới kết quả
        
$new_chuoi substr($chuoi,0,$gioihan)."...";
        return 
$new_chuoi;
    }
}

$string ="hôm nay chúng ta nghỉ cả ngày, các bạn có định đi chơi không hay đi ngủ";
echo
catchuoi($string,35);
// hôm nay chúng ta nghỉ cả ngày,... 


Lưu ý là trong kết quả trên có cả dấu phẩy (,) vì nó không phải là kí tự khoảng trắng nên PHP gom chung vào từ ngày luôn

Duration date between start date , end date php

<?php

//Find the difference (MYSQL DATETIME/DATE Format)
function find_difference($start_date,$end_date){
list($date,$time) = explode(' ',$start_date);
if($time == NULL){$time = '00:00:00';}
$startdate = explode("-",$date);
$starttime = explode(":",$time);

list($date,$time) = explode(' ',$end_date);
if($time == NULL){$time = '00:00:00';}
$enddate = explode("-",$date);
$endtime = explode(":",$time);

$secons_dif = mktime($endtime[0],$endtime[1],$endtime[2],$enddate[1],$enddate[2],$enddate[0]) -

mktime($starttime[0],$starttime[1],$starttime[2],$startdate[1],$startdate[2],$startdate[0]);

//Different can be returned in many formats
//In Minutes: floor($secons_dif/60);
//In Hours: floor($secons_dif/60/60);
//In days: floor($secons_dif/60/60/24);
//In weeks: floor($secons_dif/60/60/24/7;
//In Months: floor($secons_dif/60/60/24/7/4);
//In years: floor($secons_dif/365/60/24);

//We will return it in hours
$difference = floor($secons_dif/60/60);

return $difference;
}

echo find_difference('2008-01-10 13:00:00','2008-01-11 12:00:00');
?>

base64_decode,encode(php) = javascript

/**
*
*  Base64 encode / decode
*  http://code.google.com/p/dase/source/browse/trunk/www/scripts/webtoolkit.base64.js?spec=svn897&r=897
*
**/
 
var Base64 = {
 
	// private property
	_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
 
	// public method for encoding
	encode : function (input) {
		var output = "";
		var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
		var i = 0;
 
		input = Base64._utf8_encode(input);
 
		while (i < input.length) {
 
			chr1 = input.charCodeAt(i++);
			chr2 = input.charCodeAt(i++);
			chr3 = input.charCodeAt(i++);
 
			enc1 = chr1 >> 2;
			enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
			enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
			enc4 = chr3 & 63;
 
			if (isNaN(chr2)) {
				enc3 = enc4 = 64;
			} else if (isNaN(chr3)) {
				enc4 = 64;
			}
 
			output = output +
			this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
			this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
 
		}
 
		return output;
	},
 
	// public method for decoding
	decode : function (input) {
		var output = "";
		var chr1, chr2, chr3;
		var enc1, enc2, enc3, enc4;
		var i = 0;
 
		input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
 
		while (i < input.length) {
 
			enc1 = this._keyStr.indexOf(input.charAt(i++));
			enc2 = this._keyStr.indexOf(input.charAt(i++));
			enc3 = this._keyStr.indexOf(input.charAt(i++));
			enc4 = this._keyStr.indexOf(input.charAt(i++));
 
			chr1 = (enc1 << 2) | (enc2 >> 4);
			chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
			chr3 = ((enc3 & 3) << 6) | enc4;
 
			output = output + String.fromCharCode(chr1);
 
			if (enc3 != 64) {
				output = output + String.fromCharCode(chr2);
			}
			if (enc4 != 64) {
				output = output + String.fromCharCode(chr3);
			}
 
		}
 
		output = Base64._utf8_decode(output);
 
		return output;
 
	},
 
	// private method for UTF-8 encoding
	_utf8_encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (var n = 0; n < string.length; n++) {
 
			var c = string.charCodeAt(n);
 
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 
		}
 
		return utftext;
	},
 
	// private method for UTF-8 decoding
	_utf8_decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;
 
		while ( i < utftext.length ) {
 
			c = utftext.charCodeAt(i);
 
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
 
		}
 
		return string;
	}
 
}

Server là gì? Có bao nhiêu loại Server?

Các loại server phổ biến: Web server, Database server, FTP server, SMTP server (email sever), DNS sever.

+ Web Server là máy tính mà trên đó cài đặt phần mềm phục vụ web, đôi khi người ta cũng gọi chính phần mềm đó là web server. Tất cả các web server đều hiểu và chạy được các file *.htm và *.html. Tuy nhiên mỗi web server lại phục vụ một số kiểu file chuyên biệt chẳng hạn như llS của Microsoft dành cho *.asp, *.aspx…; Apache dành cho *.php…; Sun Java system web server của SUN dành cho *.jsp…

+ Database Server: máy tính mà trên đó có cài đặt phần mềm Hệ quản trị cơ sở dữ liệu. Chúng ta có hệ quản trị CSDL chẳng hạn như: SQL server, MySQL, Oracle…

+ DNS Server là máy chủ phân giải tên miền. Mỗi máy tính, thiết bị mạng tham gia vào mạng Internet đều kết nối với nhau bằng địa chỉ IP (Internet Protocol). Để thuận tiện cho việc sử dụng và dễ nhớ ta dùng tên (domain name) để xác định thiết bị đó. Hệ thống tên miền DNS (Domain Name System) được sử dụng để ánh xạ tên miền thành địa chỉ IP