A-AA+then

เมื่อต้องการเปิดใช้ mod_rewrite บน apache คุณต้องแทรกคำสั่งนี้ลงใน .htaccess (คุณไม่สามารถสร้างไฟล์นี้บน server ที่เป็น Windows ได้ เนื่องจาก Windows จะไม่ยอมให้สร้างไฟล์ที่ไม่มีชื่อ)

Options +FollowSymlinks
RewriteEngine on

ตัวอย่างที่ 1 เปลี่ยนเพจใดๆที่เรียกด้วย .htm ให้เป็น .php

เช่น เมื่อเรียกเพจ http://www.com/thepage.htm apache จะไปทำการเรียก http://www.com/thepage.php มาใช้งาน

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(.*)\.htm$ $1.php [nc]

ตัวอย่างที่ 2 รีไดเร็คเพจไปยัง URL อื่นโดยตรง

ตัวอย่างเมื่อทำการเรียกเพจ http://www.com/thepage.htm จะไปทำการเรียกใช้เพจที่ http://www2.com/thepage.php แทน

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(.+)\.htm$ http://www2.com/$1.php [r=301,nc]

ตัวอย่างที่ 3 ใช้ Regular expression กับ .htaccess

ตัวอย่างเมื่อทำการเรียกไฟล์ .zip ใดๆ ที่อยู่ในไดเร็คทอรี่ files/ ให้ไปทำการดาวน์โหลดไฟล์นั้นๆ ผ่านหน้า download.php เช่น

เมื่อทำการเรียกไฟล์ http://www.com/files/games/test.zip

apache จะไปทำการเรียกเพจ http://www.com/download.php?section=games&file=test เพื่อจัดการดาวน์โหลดไฟล์แทน จุดประสงค์ของวิธีนี้ก็เพื่อป้องกันการเรียกดาวน์โหลดไฟล์โดยตรง และเพื่อสามารถให้ควบคุมการดาวน์โหลดหรือนับจำนวนการดาวน์โหลดได้

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^files/(.+)/(.+).zip download.php?section=$1&file=$2 [nc]

หรือ เมื่อทำการเรียกไฟล์ rar zip doc หรือ pdf ให้ไปเรียกหน้า download

RewriteRule (.+)\.(rar|zip|doc|pdf)$ /download.php?id=$1.$2 [R,L]
ตัวอย่างที่ 4 เป็นมิตรกับ Search Engine

สังเกตุ URL http://www.com/index.php?id=5 จะเห็นว่า URL แบบนี้ไม่ได้บอกความหมายว่าหน้านี้หมายถึงหน้าอะไร แต่ถ้าระบุ URL เป็น http://www.com/htacess-tip-trick จะสื่อความหมายได้ว่าหน้านี้จะมีเนื้อหาอย่างไร ซึ่ง Search Engine จะให้คะแนน URL ที่สื่อความหมายตรงๆได้ดีกว่าครับ

ตัวอย่างจะเป็นการระบุ URL ของ blog ในรูปของ วันเดือนปี เช่น http://www.com/blog/17-1-2551 แล้วจะแปลงให้เป็น query ในรูปของ http://www.com/blog/index.php?d=17&m=1&y=2551 เพื่อให้ blog แสดง blog ในวันที่กำหนด

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^blog/([0-9]+)-([0-9]+)-([0-9]+) http://www.com/blog/index.php?d=$1&m=$2&y=$3 [nc]

สำหรับตัวอย่าง Regular expression ที่สามารถใช้กับ .htaccess ได้ก็คล้ายๆกับที่ใช้กับ perl ครับ เช่น

. อักขระใดๆ 1 ตัว
[chars] Character class: 1 ตัว
[^chars] ไม่ใช่ Character
text1|text2 text1 หรือ text2 | หมายถึง หรือ
? มีหรือไม่มี ตัวอักษร 1 ตัว
* มีหรือไม่มี ตัวอักษรใดๆ
+ และตัวอักษรใดๆ
(text) กลุ่มของข้อความในเครื่องหมาย () คืนค่ากลับตามลำดับเป็น $n
^ ตัวอักษรตัวแรกขึ้นต้นด้วย
$ ตัวอักษรตัวสุดท้ายลงท้ายด้วย
\char \ ใช้คู่กับอักขระควบคุมใดๆ เช่น ".[]()"

ตัวอย่างที่ 5 URL แบบสั้นๆ

บางครั้งเรามี URL ยาวๆแบบนี้ http://www.com/files/download/download.php?file=my.zip เราสามารถทำให้สั้นลงเป็น http://www.com/download?file=my.zip ได้ครับ
Options +FollowSymlinks
RewriteEngine On
RewriteRule ^download(.*) /public/files/download/download.php

ตัวอย่างที่ 6 เรียกเพจอะไรมาให้วิ่งไปที่ index.php ให้หมด

คงสงสัยนะครับว่ามันจะมีประโยชน์อะไร

ไม่ว่าเราจะเรียกไฟล์อะไรมา หรือ ไฟล์ในไดเร็คทอรี่อะไร มันจะพาเราไปยัง index.php เสมอครับ ประโยชน์ก็อย่างเช่น ป้องกันการยิงไดเร็คทอรี่ สำหรับพวกมือดีที่ต้องการตรวจสอบว่าเรามีไฟล์หรือไดเร็คทอรี่อะไรบ้างบน Server ในกรณีนี้ มันจะพบ ทุกไฟล์และทุกไดเร็คทอรี่ที่ยิงมาครับ (แล้วจะรู้ไหมเนี่ยว่าอันไหนเป็นไดเร็คทอรี่จริงๆบน Server) นอกจากนี้เรายังสามารถใช้สำหรับทำ Sub Domain ได้ด้วย ด้วยการตรวจสอบ ค่าที่ส่งมาแล้วเอาไปแยกออกเป็น Sub Domain หรือ ไดเร็คทอรี่ เช่น ตัวแปร$_SERVER[DOCUMENT_ROOT] หรือ $_SERVER[REQUEST_URI] ของ PHP

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+) - [PT,L]

RewriteRule ^(.*) index.php

ตัวอย่างที่ 7 Virtual Sub Domain

เป็นการ Config .htaccess ให้เป็น virtual sub domain โดยจะมี domain ในรูป http://user.domian.com สำหรับพวก free host หรือ blog ที่มี user เป็น sub domain โดยเมื่อเรียก sub domain นี้ จะไปทำการเรียกใช้ ไดเร็คทอรี่ ภายใต้ไดเร็คทอรี่หลัก เช่น /home/hosting/user/public_html/sub/directory/

RewriteEngine on
RewriteCond %{HTTP_HOST} ^[^.]+.domain.com$
RewriteCond %{HTTP_HOST} !www.domain.com [NC]
RewriteRule ^(.+) %{HTTP_HOST} [C]
RewriteRule ^([^.]+).domain.com(.*) /home/hosting/public_html/$1

ตัวอย่างที่ 8 ให้ google ไปยัง URL ที่กำหนด

เป็นการ Config .htaccess ให้ google ไปอ่านเพจที่กำหนด โดยการตรวจ IP ของ google เมื่อพบกลุ่ม IP ที่เป็นของ google จะให้ google ไปอ่านยังเพจที่กำหนดทันที

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REMOTE_ADDR} ^216\.239\.(3[2-9]¦[4-5][0-9]¦6[0-3])\.([0-9]¦[1-9][0-9]¦1([0-9][0-9])¦2([0-4][0-9]¦5[0-5]))$¦^64\.233\.(1([6-8][0-9]¦9[0-1]))\.([0-9]¦[1-9][0-9]¦1([0-9][0-9])¦2([0-4][0-9]¦5[0-5]))$
RewriteRule \.php$ http://www.example.com/ [R=302,L]

ลองดูเพิ่มเติม ที่นี่ครับ http://www.ilovejackdaniels.com/cheat-sheets/mod_rewrite-cheat-sheet/

Relate

^