Thứ Sáu, 18 tháng 1, 2013

Cấu trúc theme WordPress

Các thuật ngữ cơ bản


Để trở thành một nhà phát triển web (web developer) hay một nhà thiết kết web (web designer) bằng wordpress bạn cần hiểu được cấu trúc của một theme wordpress. Trước hết ta nên đi vào tìm hiểu 2 thuật ngữ khá phổ biến nhưng không kém phần quan trọng:
- Theme: Đây là một tập hợp các tập tin có chứa hình ảnh, âm thanh, code,.. giúp hình thành nên giao diện của trang web
- Template: Là một đoạn code được viết dưới dạng một hàm hay lưu trữ trong 1 file bằng ngôn ngữ PHP để có thể sử dụng lại nhiều lần. Cấu trúc theme của wordpress chính là tạo ra từ các template, được gọi bởi các hàm đã được xây dựng sẵn của wordpress hoặc do người dùng tự tạo.
- CSS: là code được viết bằng ngôn ngữ CSS dùng để tác động tới giao diện của toàn trang. Thông thường stylesheet chính được lưu vào file style.css nhưng cũng có thể tùy chỉnh do người dùng.
theme wordpress

Danh sách template wordpress

Một theme wordpress được tạo ra bằng hệ thống truy cập phân cấp vào các template, thông thường để gọi những template sẵn có wordpress cung cấp sẵn những hàm gọi đã được định nghĩa (các hàm thường bắt đầu bằng chữ wp_ ). Tất nhiên để có thể sử dụng được các hàm này thì bạn phải đặt tên các template theo chuẩn wordpress nếu không muốn phải định nghĩa lại.
Một theme cơ bản nhất của theme wordpress cần 2 file chính là index.php và style.css. Khi phát triển web hoàn thiện sẽ cần các file template khác, sau đây mình sẽ giải thích những template quan trọng thường có trong các theme dựng sẵn, được lưu trong thư mục public.html/wp-content/themes:
- style.css : Stylesheet chính. Chứa các đoạn code CSS cho theme, được gọi từ header.
- rtl.css : File này tự động hướng trang web từ phải sang trái, có thể được tạo bằng plug-in RTLer.
- index.php : để hiển thị trang chủ, nó sẽ hiển thị những bài viết ở dạng tóm tắt hoặc thu gọn theo ý người lập trình
- comments.php : Các ý kiến hoặc phản hồi, ping back, track back tới trang web. Ở các template này không nên chứa các định nghĩa function mà bạn muốn thêm vào mà hãy để chúng trong hàm functions.php
- front-page.php : Trang front-page, thường dùng khi bạn muốn hiển thị một trang tĩnh
- home.php : Thường dùng khi bạn muốn có một front-page tĩnh nhưng có cập nhật các bài viết mới nhất
- single.php : Trình bày một post
- single-<post-type>.php : Trình bày post có sự điều chỉnh riêng nhất định.
- page.php : Trình bày một page
- category.php : Trình bày một category – thư mục
- tag.php : Trình bày một tag, khi một từ khóa được truy vấn
- taxonomy.php : Trình bày một phân loại, khi một phân loại được truy vấn
- author.php : Trình bày tác giả, người viết hay người phản hồi
- date.php : Trình bày ngày tháng
- archive.php : Được sử dụng khi tác giả, ngày tháng, hay thư mục được truy vấn. Nó sẽ bị ghi đè bởi author.php, date.php, category.php
- search.php : Trình bày khi một kết quả tìm kiếm được truy vấn
- attachment.php : Trình bày khi xem một tập tin đính kèm
- image.php : Trình bày khi xem một hình ảnh đính kèm
- 404.php : Trình bày khi nhập sai URL, wordpress không thể tìm thấy bài viết phù hợp truy vấn.
Ngoài ra còn có thể có template khác tùy theo từng theme

Cấu trúc theme wordpress

theme struction
Về tổng quan một giao diện web trong wordpress sẽ được bố trí như trên. Trong đó các phần được định nghĩa như sau

Head và thanh tiêu đề (header.php)

- Bao gồm thẻ mở <html> và phần <head> và phần tiêu đề (navigation) hiển thị phần đầu của web.
- Link tới file CSS, dùng lệnh wp_head() để gọi stylesheet, script hay các fucntion khác.
- Gọi ra bởi hàm có sẵn trong wordpress là wp_get_header().

Widgets (sidebar.php)

- Chứa các code về sidebar hai bên cạnh trang web về link blog, mây thẻ…. hiển thị hai bên của web.
- Các code có thể mặc định hoặc sẽ xuất hiện khi kích hoạt trong Appearance -> Widgets

Single Post (post.php), Home (index.php), Page (page.php)

- Đã giới thiệu ở trên, sẽ hiển thị phần chính của web.

Lưu trữ (archive.php)

- Hiển thị lưu trữ tiêu đề (tag, category, date-based, hoặc author archive).
- Hiển thị một danh sách các bài viết trong đoạn trích hoặc hình thức đầy đủ
- Bao gồm wp_link_pages () để hỗ trợ chuyển hướng các liên kết trong bài viết.

Bình luận (comments.php), Tìm kiếm (search.php)

- Đây là các template chức năng, dùng khi cần sử dụng các chức năng này

Footer (footer.php)

- Chứa các mã liên quan tới menu footer, đóng dấu bản quyền v.v…. hiển thị ở chân trang web.
- Chứa thẻ đóng </body> và </html>. Gọi ra bởi hàm có sẵn của wordpress là wp_get_footer().
Vậy là các bạn đã tìm hiểu sơ qua một vòng cấu trúc của một theme wordpress. Bài viết này mình không đi sâu vào code mà chỉ cho các bạn thấy tổng quan nên phần code cụ thể để gọi hàm mình sẽ trình bày vào các phần sau.  Chúc các bạn có được cái nhìn rõ ràng hơn về một theme wordpress để có thể đi được những bước đầu làm chủ wordpress thuận lợi

Tự làm sạch thùng rác và tắt chức năng Auto save wordpress

Thùng rác là một phần mới của WordPress 2.9 . Khi viết một bài viết, bình luận bị xóa thì nó sẽ chui ngay vào thùng rác chứ không bị xóa mất tăm mất tích như trước đây. Nhưng nhiều khi bạn quên empty nó đi khiến lãng phí tài nguyên. Và đây là đoạn code nhỏ giúp blog của bạn tự động làm điều đó:
1
define('EMPTY_TRASH_DAYS', 10 );
Chèn đoạn code trên vào wp-config.php. Tham số ’10′ chính là thời gian bài viết, bình luận được tồn tại trong thùng rác, bạn có thể tùy chình theo ý bạn
Phần thứ 2 của bài viết là: Vô hiệu hóa chức năng ‘Auto save”. Jos không khuyến cáo bạn tắt chức năng này đi, nhiều khi cúp điện cái rụp mà đang viết bài ( may mắn là Jos không phải chịu cảnh này, nghe các bạn ở Vietnam than thấy sợ luôn  )
Để tắt chức năng Auto save Jos dựa vào 1 hook của WordPress, bạn hãy chèn đoạn code sau vào funtion.php
1
2
3
4
function disableAutoSave(){
 wp_deregister_script('autosave');
}
add_action( 'wp_print_scripts', 'disableAutoSave' );
Từ giờ trở đi WordPress sẽ không bao giờ autosave một bài đăng nào của bạn

Thứ Năm, 17 tháng 1, 2013

Phân quyền thành viên trong WordPress

Nếu blog của bạn có nhiều thành viên thì sẽ hiểu rằng trong WordPress có một số nhóm thành viên mặc định như Subscriber, Administrator, Editor, Author, Contributor với một số quyền hạn như sau:
  • Subscriber: Chỉ có thể đọc các bài viết, còn được xem như là một thành viên đăng ký thông thường.
  • Contributor: Tức là nhóm cộng tác viên, có thể viết và gửi bài nhưng các bài đó sẽ không được đăng lên, phải đợi sự kiểm duyệt của nhóm chức vụ cao hơn.
  • Author: Nhóm này có thể viết và đăng bài viết lên để hiển thị trên blog, có thể chỉnh sửa và quản lý bài viết của chính mình.
  • Editor: Không tính Administrator thì đây là nhóm thành viên cao nhất, có thể viết bài, đăng bài, quản lý bài của mình và tất cả các bài của người khác.
Nhìn chung thì các quyền thành viên cũng tương đối hợp lý rồi, nhưng nếu các bạn muốn làm một trang quản lý nội dung cỡ lớn (CMS) hoặc làm một diễn đàn với Bbpress và muốn thay đổi quyền của các nhóm này thì sao? Rất tiếc là mặc định của WordPress không cho phép bạn chỉnh sửa các quyền của từng nhóm thành viên.
Như vậy, giải pháp duy nhất và đơn giản nhất mà chúng ta có ở đây là sử dụng các plugin cho phép phân quyền cho từng nhóm thành viên tùy theo ý bạn. Trong bài viết này mình xin giới thiệu đến các bạn một số plugin giúp bạn làm việc này một cách hiệu quả nhất.

User Role Editor

Đây có thể nói là một plugin phân quyền thành viên tốt nhất tính đến thời điểm hiện tại. Với chức năng cho phép bạn thêm và lượt bỏ một số quyền một cách đơn giản nhất chỉ việc bấm chọn hoặc bỏ chọn.

Không những thế, nó còn có thêm chức năng tạo nhóm thành viên mới với quyền tự chọn cũng rất đơn giản. Đây là một sự lựa chọn tốt dành cho những ai có nhu cầu làm một blog thông tin chuyên nghiệp bao gồm nhiều nhóm thành viên với nhiều nhiệm vụ khác nhau.

Gợi ý - Bluehost

Hosting được 2 năm liền bình chọn là một trong những hosting cá nhân chất lượng tốt nhất. Đăng ký ngay hôm nay chỉ còn 4,95$/tháng và miễn phí tên miền 1 năm.
Để tôi thử!

Một lưu ý nhỏ khi sử dụng plugin này là khi bạn deactive plugin thì các nhóm và quyền vẫn giữ nguyên, vì vậy trước khi tháo bỏ plugin, các bạn hãy xóa các nhóm hoặc khôi phục quyền mặc định cho các nhóm mà bạn muốn.
Và đó là lý do tại sao mà plugin này đã có hơn 362,000 lượt download tính đến thời điểm hiện tại.
Download User Role Editor plugin

Role Scoper

Được biết đến kể từ khi phiên bản đầu tiên dành cho WordPress 2.x cho đến nay, Role Scoper luôn là một sự lựa chọn hoàn hảo cho những blog có nhu cầu tạo một hệ thống phân quyền thành viên nâng cao và phức tạp. Mang một nhược điểm khó sử dụng nhưng lợi thế lớn nhất của plugin này đó là đa năng và có thể làm được nhiều việc mà bạn không bao giờ nghĩ tới.
Plugin này giúp bạn hạn chế hoặc mở rộng phạm vi làm việc của từng nhóm như quản lý category, quản lý bài viết, quản lý nhóm, quản lý link liên kết..v.v..Chỉ có vậy thôi nhưng nếu như bạn sử dụng nó lần đầu thì sẽ hơi mất thời gian để tìm hiểu cách làm việc nó đấy  :look_down: .

 S2 Member

Đây là một plugin khá tốt dùng để làm một hệ thống hội viên dành cho blog. Các hệ thống hội viên này thường áp dụng vào một số website có nội dung dành cho một nhóm thành viên có trả phí ví dụ như trang tải dữ liệu, lớp học trực tuyến, chia sẻ tutorial trả phí..v.v..
Một số tính năng chính của S2 Member Plugin:
  • Tích hợp cổng thanh toán PayPal.
  • Xây dựng hệ thống quyền và phạm vi ứng dụng.
  • Tùy chọn hệ thống hội viên theo cấp độ.
  • Tùy chọn một số thông tin thêm khi đăng ký.
  • Hỗ trợ template dành cho email.
  • Tùy biến trang đăng nhập.
  • Hỗ trợ sử dụng shortcode trong thông tin thành viên.
  • Chức năng hạn chế xem nội dung dành cho một số nhóm thành viên.
  • Chức năng hạn chế download file dành cho một số nhóm thành viên.
  • Chức năng mã giảm giá, xóa và hạ chức thành viên.
  • Tích hợp dịch vụ Mailchimp và Aweber.
  • Tương thích tốt với Bbpress và Buddypress.
Ngoài ra sẽ còn có một số chức năng nâng cao khác nữa trong phiên bản trả phí (S2 Member Pro).

BAW Moderator Role

Plugin này thường dùng tốt cho các blog có lượng độc giả lớn với nhiều bình luận được đăng lên thường xuyên. Nếu bạn không thể kiểm soát được các bình luận do người dùng gửi lên thì có thể giao quyền hạn kiểm duyệt bình luận cho một thành viên riêng biệt, và plugin này sẽ giúp bạn làm điều đó.
Khi cài plugin này xong, nó sẽ tự động tạo một nhóm tên là Moderator và chỉ có quyền bình quản lý bình luận.

Restrict Category


Gợi ý - Justhost chỉ 3,95€/tháng

Hosting quốc tế giá rẻ chất lượng cao hiện nay chỉ còn 3,95€/tháng. Đăng ký 12 tháng để nhận được tên miền quốc tế một năm miễn phí.
Để tôi thử!
Plugin này có thể kết hợp với các plugin phân quyền khác để có thể làm việc một cách hoàn hảo nhất. Tính năng của nó là hạn chế thành viên đăng bài lên một category vào nó. Rất thích hợp với các blog có nhiều author và phân quyền quản lý nội dung dành cho một số category đặc biệt của các author.

 Dashboard Sidenote

Và cuối cùng, khi blog bạn có nhiều thành viên cùng làm việc với nhau thì việc gửi thông báo hay lời nhắn gì đó đến tất cả các thành viên  là một điều khá quan trọng. Với Dashboard Sidenote thì bạn không cần gửi email cho từng thành viên hoặc các phương thức phức tạp khác, plugin sẽ tạo một cột hiển thị thông báo của Admin để mọi người có mặt trong wp-admin có thể nhìn thấy.

Và còn rất nhiều plugin khác có một chức năng tương tự nữa mà bạn chỉ cần tìm kiếm plugin với từ khóa “user role” hay các từ khóa tương tự là sẽ thấy rất nhiều. Nhưng ở trong bài viết này mình chỉ giới thiệu một số plugin tốt nhất mà mình đã từng sử dụng qua, giúp bạn tiết kiệm thời gian trong việc chọn lựa plugin để mở rộng tính năng quản lý thành viên một cách hiệu quả hơn.

Thứ Năm, 3 tháng 1, 2013

Htaccess toàn tập

GIT – Góc IT xin giới thiệu với các bạn : Những thủ thuật .htaccess bạn nên biết, Tối ưu và bảo mật website bằng file .htaccess, Cách Rewrite URL trong – Tạo đường dẫn thân thiện cho website
1.Những thủ thuật .htaccess bạn nên biết

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

Dòng lệnh .htaccess của bạn nên bắt đầu như sau :
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.gocit.vn/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ạihttp://www.gocit.vn/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.gocit.vn/” 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.gocit.vn/$1 [R=301,L]
Hãy thay đổi www.gocit.vn 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.htmlthì 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://truongchieu.byethost8.com), 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\.gocit.\.net$ [NC]

RewriteRule ^(.*)$ http://www.gocit.vn/$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.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.gocit.vn%{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(-)

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 vietprotocol 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.gocit.vn/$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.gocit.vn/support [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\.)?gocit.vn/.*$ [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.gocit.vn">

PHP Redirect

ASP Redirec

<%@ Language=VBScript %>

<% Response.Status="301 Moved Permanently" Response.AddHeader "Location","http://www.gocit.vn/" %>

ASP .NET Redirect

JSP (Java) Redirect

<% response.setStatus(301); response.setHeader( “Location”, “http://www.gocit.vn/” ); response.setHeader( “Connection”, “close” ); %>

CGI PERL Redirect

$q = new CGI;

print $q->redirect("http://www.gocit.vn/");

Ruby on Rails Redirect

def old_action
headers["Status"] = “301 Moved Permanently”
redirect_to “http://www.gocit.vn/”
2.Tối ưu và bảo mật website bằng file .htaccess
Sử dụng file .htaccess để tối ưu và bảo mật website của bạn hơn: bảo vệ các file quan trọng, giới hạn upload, chuyển hướng 301, trang lỗi tùy chỉnh, tắt liệt kê nội dung thư mục, nén nội dung…
Chức năng:
1. Bảo vệ tệp tin
2. Tắt chữ ký số của web server
3. Giới hạn upload
5. Giới hạn quyền truy cập
6. Trang lỗi tùy chỉnh
7. Tắt liệt kê nội dung thư mục
8. Chuyển hướng 301
9. Chống ăn cắp băng thông như hình ảnh, video (bandwidth)
10. Bật nén PHP compression (bandwidth)
11. Thiết lập canonical url cho website
1.Bước 1, Tạo file .htaccess.
Mở Notepad hoặc phần mềm text editor. Lưu và Đặt tên file htaccess.txt.
2. Nhập nội dung vào file htaccess.txt.
# Bảo vệ file file htaccess
<files .htaccess>
order allow,deny
deny from all
</files>
#Tắt chữ ký số của web server
# disable the server signature
ServerSignature Off
# limit file uploads to 10mb
LimitRequestBody 10240000
# Bảo vệ file cấu hình config.php
<files config.php>
order allow,deny
deny from all
</files>
# Giới hạn truy cập, chặn IP
order allow,deny
#deny from 000.000.000.000
allow from all
# Tạo Trang lỗi tùy chỉnh
# custom error docs
ErrorDocument 404 /notfound.php
ErrorDocument 403 /forbidden.php
ErrorDocument 500 /error.php
# Tắt liệt kê nội dung thư mục
Options All -Indexes
# Chuyển hướng 301
Redirect 301 /old.php http://www.gocit.vn/new.php
# Khóa tên miền tham chiếu
RewriteEngine on
RewriteCond %{HTTP_REFERER} digg\.com [NC]
RewriteRule .* – [F]
Chống ăn cắp băng thông
#disable hotlinking of images with forbidden or custom image option
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?gocit.vn/.*$ [NC]
#RewriteRule \.(gif|jpg)$ – [F]
#RewriteRule \.(gif|jpg)$ http://www.gocit.vn/images.gif [R,L]
Nén file
# php compression – use with caution
<ifmodule mod_php4.c>
php_value zlib.output_compression 16386
</ifmodule>
Tránh trùng lặp nội dung
# set the canonical url
RewriteEngine On
RewriteCond %{HTTP_HOST} ^yourdomain\.com$ [NC]
RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=301,L]
# Chống spam comments
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*yourdomain.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
3. Upload htaccess.txt lên server.
Sử dụng client (sử dụng ASCII mode) và đổi tên file là .htaccess.
CHMOD file .htaccess sang 644.
4. Kiểm tra kết quả.
Apache cung cấp khả năng cấu hình qua những files truy cập siêu văn bản .htaccess., cho phép thay đổi tinh chỉnh của Apache (.conf). Đảm bảo file này được ấn định một mức độ bảo mật nhất định, tránh những truy cập bất hợp pháp từ bên ngoài (xem, sửa, xóa) những tinh chỉnh này.
1.Định nghĩa .htaccess:
Để làm được như vậy, trước tiên bạn cần chmod file .htaccess là 644, về chmod bạn có thể tìm hiểu ở nhiều tài liệu, hoặc google.
.htaccess có tác dụng trên thư mục hiện hành (nơi chưa nó) và tất cả các thư mục con. Vì vậy, muốn sử dụng .htacess để quản lí truy cập vào website của mình, đơn giản bạn chỉ việc soạn thảo một file .htaccess, và lưu nó vào thư mục của website.
2.Comment trong .htaccess:
Nếu đã sử dụng và một lần sửa đổi cấu hình Apache thì chắc chắn bạn cũng biết, muốn sử dụng một module nào đó trong những available modules, bạn phải xóa dấu “#” (hash). Dấu “#” này dùng để định nghĩa một đoạn comment trong httpd.conf, và .htaccess cũng vậy. Một ví dụ:
CODE
#Enable Rewrite mod << đây là comment, dòng này sẽ không được thực thi #trong .htaccess
RewriteEngine on
3.Những chú ý quan trọng:.htaccess là một công cụ rất mạnh trong việc quản lí website. Một lỗi cú pháp nhỏ (thậm chí là một khoản trắng) cũng khiến website của bạn hoạt động không được bình thường như trước. Sau khi áp dụng .htaccess, bạn nên kiểm tra một lượt website của mình xem .htaccess có gây ra lỗi ở phần, trang con nào không? Do vậy trước khi làm việc với .htaccess, bạn nên backup cẩn thận dữ liệu của mình, nếu có trục trặc xảy ra, việc khôi phục trở nên đơn giản.
4.Vấn đề về performance:
.htaccess cho phép bạn cấu hình mà không cần động chạm vào cấu hình chính của Apache. Tuy nhiên, về mặt hiệu năng và bảo mật, nếu có thể, bạn nên sử dụng httpd.conf hơn là sử dụng .htaccess. Cụ thể, khi được cấu hình để sử dụng .htaccess, thi Apache sẽ tìm kiếm tất cả những folder có chứa .htaccess để thực thi, và nó sẽ thực thi tất cả những file .htaccess tìm được. Do vậy, sẽ làm website của bạn trở nên ì ạch một cách không cần thiết. Nếu website của bạn là website cá nhân, hoặc ít người truy cập, thì đó là chuyện nhỏ. Nhưng nếu là một website đại chúng (báo điện tử, trang nhạc, film..) thì đây là một vấn đề rất lón. Do vậy .htaccess chỉ có tác dụng trong trường hợp bạn không có quyền cấu hình trên httpd.conf của Apache.
5.Những kí tự đặc biệt sử dụng khi cấu hình .htaccess
#
Như đã nói ở trên, # đặt trước một dòng để định nghĩa dòng này là một đoạn comment, dòng này sẽ không được thực thi cho đến khi bạn xóa dấu “#” đi. Khi comment, bạn chỉ nên sử dụng các chữ cái, số, dấu gạch ngang hoặc gạch dưới để tránh những lỗi cú pháp không cần thiết.
[F]
Forbidden: Kí tự này dùng để chỉ định server sẽ trả về client trang lỗi 403 nếu truy cập vào những nơi không được phép
[L]
Last rule: kí tự này để ấn định rằng bước trước đã xong thì ngừng và không tiếp tục thực thi lệnh rewrite tiếp theo nữa.
[N]
Next: chỉ thị cho server tiếp tục rewrite cho đến khi tất cả các mục chỉ định được rewrite hoàn toàn.
[G]
Gone: Chỉ định server trả về client trang báo lỗi không tồn tại (no longer exit)
[P]
Proxy: chỉ định server điểu kiển các yêu cầu được ấn định bởi mod_proxy
[C]
Chain: Chỉ định server thực hiện rule hiện hành song song với rule trước đó
[R]
Redirect: chỉ định server đổi hướng request sang một trang khác trong trường hợp trình duyệt gởi yêu cầu duyệt một trang được sửa chữa đường dẫn (rewrite) trước đó.
[NC]
No-case: Chỉ định server match những kí tự tương tự nhau, ví dụ dòng lệnh sau:
CODE
RewriteCond %{HTTP_REFERER} !^http://domain.com/.*$ [NC]
#Thì referrer là domain.com || Domain.com || DoMain.com…đều được match.
[PT]
Pass Through: có nghĩa là dùng kí tự để buộc “rewrite engine” ấn định bảng giá trị của uri trở thành giá trị của tên files
[OR]
Đây có thể gọi là một toán tử, các biểu thức được nối tiếp nhau bằng toán tử OR, trong đó biểu thức nào đúng, sẽ là quy tắc để lệnh Rewrite áp dụng.
Ví dụ:
CODE
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} ^Anarchie [OR]
RewriteCond %{HTTP_USER_AGENT} ^ASPSeek [OR]
RewriteCond %{HTTP_USER_AGENT} ^attach [OR]
RewriteRule ^.* – [F,L]
Như vậy, mỗi dòng Rewritecond là một biểu thức chỉ định USER_AGENT, nếu bất cứ USER_AGENT nào match, thì RewriteRule sẽ được áp dụng, sau đó ngừng.
Vì sao ngừng: Một request chỉ có một USER_AGENT, vì vậy không cần thiết phải quay trở lại kiểm tra các biểu thức còn lại, sẽ làm giảm hiệu năng phục vụ.
Lời bàn:như ở trên đã nói, bạn chỉ sử dụng những chức năng này của .htaccess nếu không có quyền cấu hình trên Apache và firewall. Những chức năng lọc và chặn User agents Mod_ đều có thể thực hiện được, vì vậy nếu đã có rule cho và Mod_security, việc thêm rule trên cho .htaccess là dư thừa, và không cần thiết.
[NE]
No Escape: Chỉ định server xử lí các gói tin trả về mà không dùng kí tự thoát
[NS]
No Subrequest: Chỉ định server bỏ qua thư mục hiện hành nếu request nhắm vào thư mục con.
[QSA]
Append Query String: chỉ định server gắn chuỗi truy vấn vào cuối cùng của URL
[S=x]
Skip: Chỉ định server bỏ qua không xem xét các X rules tiếp theo nữa nếu một rule đã được thực thi.
[T=MIME-type]
MIME-type: Khai báo định dạng files của server
[]
Chỉ định các kí tự đặt đặt trong [] sẽ được match. Cụ thể [xyx] thì các request có mang theo các kí tự x, y hoặc z sẽ được match.
[]+
Tương tự như trên, nhưng trong trường hợp này, nếu ta đặt [xyz]+ thì tất cả các request có mang theo kí tự x, y, z hoặc x’s, y’s. z’s hoặc sự kết hợp của x,y,z với bất kì kí tự nào đều được match.
[^]
Ngược lại với [], các kí tự được đặt theo dạng [xyz^] sẽ không được match.
[a-z]
Dấu ‘-‘ đặt giữa 2 kí tự bên trong cặp dấu [] sẽ match tất cả các kí tự nằm trong khoảng từ kí tự đầu đến kí tự cuối. Ví dụ [a-bA-B] sẽ match tất cả các kí tự thường vào in hoa abcd và ABCD.
a{n}
Sẽ chỉ định chính xác n kí tự a được match. Ví dụ a{3} thì 3 kí tự a sẽ được match.
a{n,}
Tương tự như trên, nhưng trong trường hợp này sẽ match các kí tự a từ na trở lên.
a{n,m}
Chỉ định một khoảng chính xác các kí tự (m-n)a sẽ được match.
()
Nhóm các phương thức truyền dữ liệu (method). VD:
CODE
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC,OR]
Các request bắt đầu (^) HEAD, TRACE, DELETE hoặc TRACK sẽ được match.
^
Bắt đầu bằng (xem ví dụ ở trên).
$
Kết thúc bằng ( .*$: kết thúc bằng bất cứ gì)
?
Thường dùng chung với (), như trong trường hợp test(ti)? thì test hoặc ti sẽ được match.
!
Phủ định. VD: “!string” sẽ match tất cả các kí tự, ngoại trừ string
-
Loại đi một chức năng, hoặc một rule đang thực thi nào đó. VD:
CODE
# không cho xem chỉ mục trong một folder nào đó
Options All –Indexes
+
Chỉ định 1 hoặc nhiều kí tự cho trước sẽ được match. Hoặc thêm một chức năng nào đó VD: G+ sẽ match tất cả các kí tự G, Gs, Gx, G..
*
Tất cả đều được match. Ví dụ:
CODE
RewriteCond %{HTTP_REFERER} !^http://domain.com/.*$
Thì tất cả request files không mở đầu bằng _http://domain.com đều được match.
|
Hoặc. Ví dụ x|y thì hoặc x hoặc y sẽ được match.
\
Kí tự thoát. VD: www\.domainname\.com Chỉ có www được match, chứ không có wwww hoặc wwwww, domainname chứ không có domainnames hoặc domainnamex…
-d
Kiểm tra thư mục có tồn tại hay không?
-f
Kiểm tra file có tồn tại hay không
-s
Kiểm tra giá trị của file có khác 0 hay không?
6. Mã chuyển hướng trang báo lỗi
- 401 – Authorization Required : Lỗi chưa được xác thực user và
- 400 – Bad request : Lỗi truy cập không hợp lệ, do server không chấp nhận request, hoặc request thiếu một số yêu cầu nào đó.
- 403 – Forbidden : Lỗi truy cập vào trang bị cấm
- 500 – Internal Server Error : Lỗi do server
- 404 – Wrong page : Lỗi truy cập vào trang không tồn tại
-301 – Moved Permanently: 302 – Moved Temporarily: Lỗi truy cập vào trang đã bị di chuyển.
3. Cách Rewrite URL trong PHP – Tạo đường dẫn thân thiện cho website
Nhiều bạn thiết kế website hỏi làm sao tạo được các đường dẫn đẹp (URL Rewrite). Trước tiên chúng ta tìm hiểu cơ chế rewite: Rewrite Engine là một phần dịch vụ của Webserver được dùng để thay đổi URL(đường dẫn trên trình duyệt) sang một dạng khác với nhiều mục đích khác nhau.
Kỹ thuật được nói đến là URL rewriting và nó đem lại những tiện lợi sau:- Làm cho URL trở nên thân thiện với người dùng cũng như dễ dàng với các Search Engine (bộ máy tìm kiếm)- Tránh lộ các đường link quan trọng- Tránh lộ các công việc bên trong trước người dùng
Bản chất của việc rewrite này các bạn có thể hình dung như sau: khi bạn gõ 1 đường link lên trình duyệt như sau: http://vidu.com/news/2007/13/01 thì đây là đường dẫn ảo, và khi request đến Webserver nó sẽ đổi lại thành đường dẫn thật như sau: http://vidu.com/index.php?mod=news&y…ay=13&month=01 << có thể là như thế này vì có nhiều cách rewrite.
Đối với Server Apache: để thực hiện được URL Rewriting bạn làm các bước sau:
1. Kích hoạt mod mod_rewrite có sẵn trong Apache bẳng cách sửa trong file httpd.conf, bạn Find đến dòng chưa rewrite_module rồi bỏ dấu # (nếu có) ở đầu đi. Sau đó restart Apache. Nếu bạn dùng các host trên internet thì có thể đã có sẵn rồi.
2. Tạo 1 file .htacces có nội dung như sau:
Đầu tiên bật Rewrite Engine:
PHP Code:
RewriteEngine on
Options +FollowSymlinks
RewriteBase 
/
Tiếp đến là viết cú pháp RewriteRule:
PHP Code:
RewriteRule ^Virtual_Path Real_Path 
Ví dụ:
PHP Code:
RewriteRule ^topic_([0-9]*).html index.php?topic=$1 
ví dụ: topic_1.html thành index.php?topic=1
PHP Code:
RewriteRule ^article/([0-9]*)/page/([0-9]*) index.php?article=$1&page=$2 
ví dụ: article/1/page/2 thành index.php?article=1&page=2
Cú pháp để viết các Rule này giống như cách viết của biểu thức chính quy Regular Expression. ví dụ như sau:
(.*) nhận tất cả các giá trị.
([0-9]*) chỉ nhận các giá trị là số, từ 0-9.
([a-zA-Z]*) chỉ nhận các giá trị là chữ cái, từ a-z và A-Z.
3. Sau khi tạo được file htaccess bạn copy nó vào thư mục gốc của web của bạn là có thể chạy được.
Đối với Server IIS: các bạn download gói cần thiết về để có thể thực hiện được việc rewrite, các bạn có thể download từ 1 số trang sau:
http://www.micronovae.com/ModRewrite/ModRewrite.html
http://www.qwerksoft.com/products/iisrewrite/
http://www.isapirewrite.com/
http://www.motobit.com/help/url-repl…od-rewrite.asp
Ngoài việc sử dụng mod url_rewrite như trên thì nếu host của bạn ko có kích hoạt mod này hoặc bạn ko có quyền để cấu hình nó như trên. Để đơn giản các bạn có thể tạo ra những cách khác nhau để làm cho URL trở nên đẹp và thân thiện hơn. Dưới đây là 1 số cách khác nhau.
c1 dạng như sau: http://vidu.com/index.php/news/2007/13/01 << Trông rất giống với kiểu rewrite ở trên nhưng nó khác ở chỗ nó là đường dẫn thật còn url rewrite là đường dẫn ảo. Đường dân này hiểu như là 1 request đến file index.php với Query String (Xâu truy vấn) là /news/2007/13/01, các bạn tách xâu này ra rồi sử dụng theo mục đích của mình. Cách này đang được trang web 24h.com.vn sử dụng.
c2 dạng như sau: http://vidu.com/index.php/news_2007_13_01.html << Gần giống cách 1 ở trên nhưng đường dẫn khác thân thiện với đuôi html, dễ dàng cho các search engine (máy tìm kiếm như Google, Yahoo) tìm kiếm nội dung.
c3 có thể viết như sau: http://vidu.com/index.php?q=news/2007/13/01 << cũng gần giống cách 1 nhưng nó rõ ràng hơn, nó được dùng trong FrameWork Drupal của PHP.
Và có thể có nhiều cách khác nhau các bạn có thể tự nghĩ ra. Hoặc có thể dùng cách mã hoá xâu truy vấn chẳng hạn.