htaccess tips and tricks

เมื่อต้องการเปิดใช้ 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/...7&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 \ (slash) ใช้คู่กับอักขระควบคุมใดๆ เช่น ".[]()"
ตัวอย่างที่ 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.whoishostingthis.com/...rewrite/cheat-sheet/
ผู้เขียน goragod โพสต์เมื่อ 02 เม.ย. 2551 เปิดดู 26,252 ป้ายกำกับ .htaccess
^