7 Dec 2009

7-12-09

Tâm trạng đang không tốt, thật sự không tốt, chen lẫn chút nóng giận.
Đôi lúc những gì chúng ta đặt mục tiêu lâu dài không phải sẽ lâu dài, ví như tình bạn chỉ vỏn vẹn...hơn 10 năm cũng chả là cái gì :-)). Thói đời khốn nạn, khốn nạn từng giây từng phút, không thể nào ngờ được.
Cám ơn những cái nhỏ nhặt tưởng chừng nhưng vô nghĩa, nhưng nó mang lại một cái gì đó vô cùng lớn lao như tìm ra được chân lí sống sau một hồi cãi vã, lol. Chỉ là một con người. Đôi khi sống và vui đùa với những cái ảo còn hơn đối diện với những cái thực mà khó lường được chuyện gì sẽ xảy ra. Đôi khi tin vào cái ảo và rồi cái ảo đó thay đổi, mất mát không làm con ngươi ta chết đi được.

10 năm để rồi ra thế này đây, tiên trách kỉ, hậu trách nhân. Cuộc sống đang tồi đi từng ngày trông thấy, nhãm nhí, vô vị, thối nát, ảm đạm.

Vẫn kìm nén được tâm trang không chửi thề ở nơi không nên chửi thể, sao mình giả dối quá. Sống giả thế này bao lâu rồi?
Đồ đồi bại.

29 Nov 2009

[New toy] Download HD wallpaper

Last night I went around the Internet to find some good wallpapers for my 1650*1050 laptop screen, then I found a good place with many wps divided into many types, and ready to be downloaded. One problem everyone will get is they just provide link to download 1 wallpaper at a time, so this script came out :).
I'm actually not a programmer, I write script just to make thing work, then it works, that's all. If someone can make it better, please let me know.
At the end, enjoy!
update 1: python script
#/usr/bin/env python
# hungnv coded
# Usage: hdwp.py then choose type
import os
types = ['abstract', 'computer', 'nature', 'travel', 'cars', 'celerbrities', 'animal']
def _getlink(bi, num, prefix):
        address = 'http://www.hdwallpapers.net/gallery/wallpapers/'
        final = (address + '%s' + '/%s%s%s.zip') %(bi, bi, prefix, num)
        return final
def downloader(_xx_):
        link = _getlink(x, i, _xx_)
        print 'Link is: %s' %link
        osvn = 'wget '+_getlink(x, i, _xx_)+' '
        os.system(osvn)
if __name__=='__main__':
        for i in range(len(types)):
                print i+1,'.',types[i]
        x = raw_input('Choose which type of wp you want to download: ')            
        if x in types:
                for i in range(1,108):
                        if i < 10:
                                _pref = '_000'
                                downloader(_pref)
                        elif i > 9 and i < 100:
                                _pref = '_00'
                                downloader(_pref)
                        else:
                                _pref = '_0'
                                downloader(_pref)
        else:
                print 'plz choose type again'
exit()
 Usage: copy and save it whatever name you want, chmod +x then run, enter your choice, wait until it finished. Update 0: I modified to make it sorter.

#/bin/bash

#Script to Download HD wallpaper from http://www.hdwallpapers.net

#hungnv@opensource.com.vn

url="http://www.hdwallpapers.net/gallery/wallpapers/"

pref="_00"

pref1="_000"

pref2="_0"

x[1]="abstract"

x[2]="cars"

x[3]="celeb"

x[4]="computer"

x[5]="animal"

x[6]="nature"

x[7]="travel"

echo -e "\t\t\n           1. Abstract

   2. Cars

   3. Celerbities

   4. Computer

   5. Animal

   6. Nature

   7. Travel

   " 

read -p 'Enter type of wallpaper you want to download: ' type

#for j in $(seq 1 7)

for ((j=0; j&lt;8; j++))
 do
 if [ $type -eq $j ]
 then
  echo Your photo is being downloaded...
  for ((i=1; i&lt;109; i++))
   do
    if [ $i -lt 10 ] 
    then
     wget -O ${x[`echo $j`]}_$i.zip $url${x[`echo $j`]}/${x[`echo $j`]}$pref1$i.zip
      if test ! -s  "${x[`echo $j`]}_$i.zip" 
       then rm -f "${x[`echo $j`]}_$i.zip"
      fi
    elif [ $i -lt 100 ] 
    then
     wget -O ${x[`echo $j`]}_$i.zip $url${x[`echo $j`]}/${x[`echo $j`]}$pref$i.zip
      if test ! -s  "${x[`echo $j`]}_$i.zip" 
       then rm -f "${x[`echo $j`]}_$i.zip"
      fi
    else
     wget -O ${x[`echo $j`]}_$i.zip $url${x[`echo $j`]}/${x[`echo $j`]}$pref2$i.zip
      if test ! -s  "${x[`echo $j`]}_$i.zip" 
       then rm -f "${x[`echo $j`]}_$i.zip"
      fi
    fi
   done
 fi
done
exit 0

19 Nov 2009

mc, screen in jail

Đôi lúc làm việc với những người buộc lòng phải nhốt họ vào jail thì những yêu cầu cần thiết của họ khi làm việc với chroot env không thể bỏ qua được. Đối với người làm việc từ xa, mỗi lúc login vào hệ thống phải mở cùng lúc nhiều cửa sổ là việc quá sức phiền phức, screen là công cụ vô cùng cần thiết.
Coder cần mc để chuyển đổi qua lại giữa các directory, lập trình với syntax highlight trên nix.

Với jail, 2 công cụ này không phải cài là làm việc ngay :).
Làm việc với screen:

prisoner  ~ $
error: "must be connected to a terminal




Cannot make directory '/var/run/screen': No such file or directory




/var/run/utmp: No such file or directory



Cannot open your terminal '/dev/pts/1' - please check.


Giải quyết từng cái một

mkdir /home/jail/dev && mount -o bind /dev  /home/jail/dev
mkdir /home/jail/dev/pts && mount -t devpts devpts /home/jail/dev/pts
mkdir /home/jail/proc && mount -t proc proc /home/jail/proc
mkdir  -p /home/jail/var/run/screen && chmod -r 777 /home/jail/var/run/screen


Tiếp theo mc:

Cannot open file ~/.mc/cedit/Syntax



warning: file /etc/mc/extfs/extfs.ini not found
Warning: file /etc/mc/extfs/sfs.ini not found
Warning: file /usr/share/mc/mc.charsets not found


Không hiểu sao trên centos khi cài đặt mc thì kiếm mãi không ra file Syntax của mc ở /usr/share/mc/syntax/Syntax, mò mãi thôi thì down source mc về, copy nội dung file Syntax và tạo ra một file Syntax ở câu báo lỗi trên cùng, lỗi khác phục.

cp -r /etc/mc/ /home/jail/etc/


Xong.

12 Oct 2009

12-10-09

Vài ngày trước mất hết tiền bạc và laptop, hnay lại mất đi một đứa bạn. Quả thật không đoán được ngày mai cái gì sẽ xảy ra, càng sống càng thấy bao nhiêu thứ phức tạp mà bản thân không hề muốn đón nhận. Cứ cố gắng tỏ ra cứng rắn rồi cũng chả được gì.

Có lần mày nói "trên đời chỉ có xe và biển là không quay đầu lại với mình, nhưng 2 thứ đó cũng có lúc đưa mày lên nóc tủ nằm đó cu à", tao không nghĩ nó lại xảy ra với mày, ngay lúc này tao chả nghĩ được gì, cũng không tin là mày còn có thể làm gì đó, thấy gì đó sau khi mất đi, chỉ mong gia đình mày bớt đau thương.

5 năm trước cũng ở trong tâm trạng thế này, chứng kiến bạn mình chết đi mà không làm được gì, tao sợ lắm. Hnay nhìn mày, nằm đó, xung quanh là bạn bè, người thân, nước mắt, có quá nhiều nổi đau xảy đến cho mọi người. Biết rõ là trước sau gì thì con người cũng phải chết đi, nhưng không thể xem là không có chuyện gì xảy ra được.

Từ hnay khi nhìn thấy Moto và biển lại nhớ thêm một thằng bạn.
Uh, thì thời gian vẫn cứ trôi, cuộc đời vẫn khốn nạn như từ khi tao với mày ra đời, mày đi trước vậy.

20 Sep 2009

[Toy] Download nhạc từ Dreammedia.ru

Đây là script mà tôi dùng để thuyết trình trong sfd 2009, cách sử dụng rất đơn giản, copy nội dung dưới đây, lưu lại với tên tùy ý [dot]sh, chmod +x file, dạo một vòng dreammedia.ru, chọn ban nhạc và tên album yêu thích, chạy script, nhập thông tin yêu cầu và download nhạc về.
#!/bin/bash
url="http://dreammedia.ru"
username=`whoami`
path="/home/$username"
input="$path/playlist.xml"
output="$path/playlist.txt"

read -p 'Enter name of band you want to download: ' band

echo
read -p 'Enter name of Album, include space if it has: ' album
playlist="http://dreammedia.ru/playlist/$band/$album/playlist.xml"
wget -O $input "$playlist"
if test ! -s $input 
then
echo 'Cannot get playlist, sorry!'
rm -f $path/playlist.xml
exit 1
else
echo 'Got it'
echo 'Start this game'
touch $output 
cat $input | awk -F '[<>]' '/mp3/{print $3}' | sed 's/\ /%20/g'> $output
fi
for i in `more $output` 
do
echo Downloading
wget  "$url$i"
done
exit 0


Chỉ có thế, ko có gì nói thêm :-D


15 Aug 2009

15-08-09

15-08-09,
Tất cả những gì làm trong nửa tháng qua dường như đổ vỡ mà không có lí do, bản thân không hiểu tại sao, chưa tìm ra nguyên nhân tại đâu. Trước mắt là tình trạng cơm không lành, canh không ngọt trong nội bộ, những búa ở trên giáng xuống đầu mình trước tiên.

Giờ sao đây, không thể rối được


22 Jul 2009

happy birthday

happy birthday to you, Olu aka Piccard. Hope you get everything you want on next year, also thank for everything you (will) teach me. I didn't have chance to say, you're the best teacher I've ever met :-p

12 Jul 2009

LVM, add new logical partition to existing LV

Format that partition using mkfs:
[root@home cappuccino]# mkfs.ext4 /dev/sda8

Initialize it

[root@home cappuccino]# pvcreate /dev/sda8
add to existing VG:

[root@home cappuccino]# vgextend vg_home /dev/sda8
use it:
[root@home cappuccino]# lvresize /dev/vg_home/lv_root -L +3.93G
final step: boot into single user mode, and active new space for Logical volume group:

1 Jul 2009

Tạp

Hôm qua thức khuya, lang thang đây đó vào blog của Lê Ngọc Hiếu (mybb) thì đọc được cái này, thực sự không hiểu nổi người đã cất công viết được một bài viết dài như thế lại không kiếm được một tấm hình của Hải quân VN, lười quá đành đem hình...hải quân Trung Quốc vào thế. Vô tình hay hữu ý?

28 Jun 2009

what is this?

you should know these things

still vmware workstation

Fedora 11, I think vmware workstation doesn't completely support latest release of Fedora, I got many problems with vmware run on F11.

Whenever I stop vmware workstation, it cannot fully stop, many vm processes are still running until I do a force kill, and today I got new problem,

25 Jun 2009

VMWare workstation: why Virtual Machine cannot start?

Not sure if users don't use Fedora get this error or not, but if you face with this error message:

unable to change virtual machine power state cannot find a valid peer process to connect to.

and your Virtual machine cannot start, my solution:

VMWare workstation 6.5.2, Fedora 11

you're using Fedora 11 and VMWare workstation not working? there are some troubles with kernel 2.6.29 and VMWare new version. Follow this steps:

saigonlug 1st meeting



Từ phone


just got this picture tonight from AnNguyen's blog(the one who stand when everyone sits on their chair, lol).
the photo took at the 1st meeting of Saigonlug, can you guess who am I? :-p

22 Jun 2009

Gentoo, my new box


here's make.conf file for my lappy, dell vostro 1400: intel t5470, 2GB ram with intel gma X3100.
with this config file, problem is around, haha. But no problem, this's time to try.

21 Jun 2009

21/6

found a nice template for this blog, just uploaded and didn't edit anything, some link will not work. I'm so tired, will edit tomorrow.

make new custom kernel for my Gentoo box. Believe me, Gentoo is the best :-p.

nite!

20 Jun 2009

gentoo?



( http://www.gentoo.org/ )

Gentoo Linux is a special flavor of Linux that can be automatically optimized and customized for just about any application or need. Extreme performance, configurability and a top-notch user and developer community are all hallmarks of the Gentoo experience.

May not be suitable because:

  • Appropriate for more experienced users

  • Time to change.

    18 Jun 2009

    16 Jun 2009

    opensource matters

    Từ phone

    vừa đi làm về thấy trên bàn có cái phong bì, với cái logo Sun Microsystem, biết ngay DVD đã về.
    cái dvd đẹp quá đi, nếu ai muốn một dvd thế này thì chỉ cần đăng kí ở Sun free media program, sẽ nhận được trong vòng 45 ngày từ lúc đăng kí, với điều kiện ghi địa chỉ chính xác :-p


    Add to PageflakesAdd to My AOLAdd to The Free DictionaryAdd to Google Reader or HomepageAdd to Webwag

    9 Jun 2009

    birthday

    there will be 23 candles on my cake until this day :)
    happy birthday to me!

    5 Jun 2009

    log user activities

    problem in this article is what a server knows, and what a client can do?

    last week I faced with a question that hard to be answered. the question is how can we monitor user's activities using log files stored at her/his computer (who was authenticated with WinSSHD server, what transfered in-out that server through SFTP feature using Tunellier).

    first thing I *should* do is explaining to who ask this question what different between a server and client, in this issue:

    • WinSSHD is a server and its duty is open its port with some security policy (if system admin cares), wait for client to connect.
    • Tunellier is such a client, and it requires a server to connect to.

    Tunellier runs on user's computer with his privilege, thus he can delete or hide auto-save Tunnellier logs everytime, whenever he wants, what makes he stop doing this? no such thing or applications can do that stupid job? or if you think or you've found another super client-side application can prevent user from delete auto-log, what stop users from using another SFTP clients?

    I never think a system administrator must collect log files at every computer at his office and use it to determine what users did? what makes he faced with problem, what makes server broken down, or something likes that. all what he could or *should* do is logging at server-side, where application designed to do its job, produce its log. If an administrator is good enough, he will never need to login to every client computer to know who-what makes error?

    someone told me that there's many ways to administrate a network system, and I know exactly that I never know as much as I need, noone knows enough, but with some situations, why we try to make it so serious? just keep it simple and wait for what will be the next Cool


    Add to PageflakesAdd to My AOLAdd to The Free DictionaryAdd to Google Reader or HomepageAdd to Webwag

    Văn Hóa

    Định viết bài này cả tuần trước, nhưng bận quá, hôm nay mới giáng phím được Cool. Chuyện là dạo này ở HVA rộ lên cái phong trào nâng cao ý thức cho trí thức, kiểu như anh cho mình văn hóa cao sẽ bồi dưỡng văn hóa cho những anh mà mình cho là có văn hóa thấp hơn ấy mà. Văn hóa này tập trung vào đúng một quan điểm: Đọc sách: Mua hay tải về đọc.


    Luận điểm: tải sách về đọc là đọc sách lậu, hoàn toàn đúng đối với những cuốn sách được treo giá trên các trang giao dịch trực tuyến, Amazon là phổ biến.

    Tôi chả có bao giờ nói việc mua sách về đọc là sai nhé, thậm chí cả cái bài này tôi viết không có ý kiến gì phản bác việc mua sách, tôi chỉ nói về cái văn hóa như tit của bài này thôi.Innocent. Để có thể đồng ý hay phản bác, bạn có thể đọc bài này: http://www.hvaonline.net/hvaonline/posts/list/28363.hva .

    Văn hóa bao gồm nhiều khía cạnh, nhiều ngữ nghĩa, nhiều cung bậc, nhiều đánh giá khách quan + chủ quan. Và thưa với tất cả rằng từ bé đến giờ chưa bao giờ thầy cô giáo, cha mẹ, anh chị em hoặc bất kì ai chỉ cho tôi thấy người nào có quyền xác định tôi hay ai đó có văn hóa không? Đã có ai dám vỗ ngực mình là người văn hóa chưa? Đã có ai định nghĩa văn hóa cụ thể bằng văn bản đầy đủ, cấp bậc văn hóa, vô văn hóa...chưa? Nếu có tôi chưa đọc, chắc không đọc đâuTongue out.

    Trích:

    • Đó là chuyện sách vở. Mình nghĩ chắc đa số các bạn ở đây đã đi làm, kiếm được tiền từ công việc mà mình làm. Thế thì tại sao lại đọc sách lậu và khuyến khích người khác đọc sách lậu nhỉ? Mình thấy như thế không có đúng chút nào.

      Nếu sách cần cho công việc, và công việc đó đem lại tiền cho mình, thì nên bỏ tiền ra mua sách. Tại sao bỏ tiền ra mua máy tính, mua điện thoại, mua ipod, mua những thứ đồ xa xỉ khác thì được, nhưng sách, một thứ sản phẩm hết sức văn hóa thì lại toàn đi chôm, một hành động rất là vô văn hóa?
    Cuốn sách mà topic đang bàn luận là cuốn mà tôi đã down về và chia sẻ ở HVA theo lời khuyên của bạn choc_, người này tôi có biết, có lần cụng li, bàn luận, bắt tay nhưng thề là không thể nào hợp với người này. Tôi tin rằng nếu bạn biết đến blog của tôi qua HVA, bạn cũng biết người này là ai, nhưng không nhận ra thôi. "Hắn" đang đóng một vai khác trong cuộc đời mình, có điều diễn xuất....hơi tệ Wink. Đó là phần giới thiệu. Đặt vào hoàn cảnh người muốn đọc sách, đừng đặt mình vào vị trí người mua sách về để đọc + chưng + cho người khác biết là mình mua sách, bạn có đồng ý với quan điểm trên không? Tôi đọc sách, trước hết tôi cần đến kiến thức trong sách, những gì tôi cần, tôi kiếm bằng được, miễn là hành động "đi kiếm" và "kiếm được" không gây hại cho ai (theo một phương diện nào đó) thì tôi làm. Nếu tôi là giáo viên, việc sinh viên của tôi cầm một cuốn sách đọc tôi sẽ cảm thấy rất vui. Nếu tôi là cha mẹ, khi thấy con mình đọc sách tôi có vui không? Nếu tôi là một ông Sếp nào đó, nhìn thấy nhân viên của mình chăm chỉ nghiên cứu từ sách, tôi có hài lòng không? Xin thưa là có, và xin hỏi một câu rằng: giáo viên, cha mẹ và ông Sếp có cần quan tâm đến cuốn sách kia đâu ra không? 99% là không, 1% còn lại chưa xác định được.
    Người đứng trên quan điểm có văn hóa khi phán xét người khác không có văn hóa, cần khách quan mà nhận định vấn đề, đặt mình vào vị trí người khác để nhận xét. Liệu có văn hóa là có quyền chỉ trích người khác vô văn hóa? Anh không có quyền, văn hóa của anh ai kiểm chứng? Ai xác định? Ai cấp bằng "văn hóa" đó cho anh? Tôi cho hành động chỉ trích đó là "vô văn hóa", anh lấy luận điểm gì để chống lại tôi? EmbarassedMua sách, mua điện thoại, mua ipod, những thứ đồ xa xỉ ...là ai mua? Bao nhiêu người có đủ tiền để dùng những thứ đồ đó? Bao nhiêu người cong lưng ra làm + học tập mớ kiến thức từ những cuốn sách để có tiền mua được những thứ đó? Nhận định sai lệch hay đứng trên quan điểm của mình phán xét người khác là hòan toàn sai lầm, và uổng công tỏ ra ta đây đọc nhiều sách.
    • Tôn trọng giá trị lao động của người khác cũng là tôn trọng chính bản thân mình, nhất là khi mình dùng thành quả của người ta vào công việc của mình. Nó cũng giống như tham khảo sách vở, tài liệu, công trình của người khác để viết ra paper của mình, mà không cite gì hết. Cái này người ta gọi là đạo văn thì phải :-p. Còn chôm sách là đạo gì ta? Đạo tri thức?

      Sách có quá mắc không? Mình không nghĩ thế, ít có cuốn sách nào quá 1tr VND, mà lương ra trường của một bạn sinh viên ở VN một tháng chắc cũng tầm 4-5tr VND rồi (mình tin là các bạn ở đây lương còn cao hơn). Nghĩa là để dành một tháng thì cũng mua được 2-3 cuốn. Một năm tệ lắm cũng mua được 10-15 cuốn. Vừa có được sách để đọc, vừa thấy thanh thản trong lòng, tại sao không nhỉ?
    Có câu sai 1 cũng là sai, sai một nửa cũng là sai. Những kiến thức mà hầu như người VN chúng ta có và có thể dùng được toàn là từ sách lậu. Một sinh viên khi ra trường nếu có kiến thức chắc chắn đã từng đọc sách...lậu. Những kiến thức ban đầu đó tạo tiền đề để chúng ta có thể tiếp thu những kiến thức cao + sâu hơn. Đạo tri thức? Khi nói ra câu này người viết có thể đã quên mình là ai.
    Sách không quá mắc? Sinh viên ra trường lương cũng cỡ tầm 4-5 triệu? Bạn này đang sống ở VN, mà cứ như đang sống ở Mĩ Undecided. Cho dù lương sinh viên mới ra trường đạt được mức đề ra bên trên, thì mức sống ở cái thành phố HCM xa xỉ này liệu còn dư được bao nhiêu, hay không dư còn không chừng? Nếu có dư, tôi dùng tiền đấy mua quà cho cha mẹ, phụ gíup gia đình, nuôi em học hành không "văn hóa" hơn sao.
    Tôi cũng xin nói rằng chúng ta không thể thực hiện một hành động văn hóa để trở thành một người văn hóa. Kẻ giết người buổi sáng, buổi chiều dắt tay một cụ già qua đường thì kẻ đó cũng là kẻ giết người. Thế tên ăn trộm có tiền, hôm sau có tiền mua một cuốn sách là hắn có "văn hóa", buồn cười vô cùng. Xin thưa rằng với hàng trăm công việc, cử chỉ, lời nói mà chúng ta thực hiện hàng ngày, có bao nhiêu phần trăm văn hóa trong đó? Văn hóa phẩm đồi trụy cũng là văn hóa đấy Cool.
    Với tôi, những gì mua được tôi sẽ mua, những gì không mua được mà có thể tìm được, trên quan điểm không gây hại cho ai như trên, tôi sẽ tìm. Việc viết ra bài này chỉ là một lúc hứng thú, ngứa tay không viết không được. Cơ mà ước gì anh bạn choc_ vào đây đọc cùng "luận" chắc sẽ vui, sẽ có nhiều văn hóa được đưa ra lắm đây.
    À, mà "chửi tục" có văn hóa không? Nguời vừa "chửi tục hàng ngày" + mua sách có phải là người văn hóa không? Câu này khó trả lời lắm à.
    Add to PageflakesAdd to My AOLAdd to The Free DictionaryAdd to Google Reader or HomepageAdd to Webwag

    Bản lược dịch .htaccess tricks

    Đây là bản dịch theo loạt bài Stupid htaccess Trick. . Bản gốc các bạn có thể đọc tại đây:
    Code:
    http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/


    Phần I:

    1.Định nghĩa .htaccess:apache cung cấp khả năng cấu hình qua những files truy cập siêu văn bản . Những files này cho phép thay đổi tinh chỉnh của Apache (httpd.conf) . Theo mặc định file này có tên .htaccess. Do .httaccess mang những tinh chỉnh quan trọng cho nên, người sử dụng phải đả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. Để làm được như vậy, trước tiên bạ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 root 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.

    Lời bàn: Những cú pháp sử dụng .htaccess thông dụng được phổ cập rộng rãi ở các website VN đều là những tinh chỉnh ở mức cơ bản, do vậy các bạn khi đọc những dòng chú ý này có thể không quan tâm, nhưng cẩn thận thì vẫn hơ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 math 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_security và Iptables đều có thể chặn, vì vậy nếu đã có rule cho iptables 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à password
    - 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.

    Add to PageflakesAdd to My AOL Add to The Free DictionaryAdd to Google Reader or HomepageAdd to Webwag

    Disqus