Pretty urls ก็คือการทำให้ url ที่มันจำยากๆ ให้มันสามารถอ่านเข้าใจได้ ซึ่งปกติคนทั่วไป ถ้าดูแล้วอาจจะงงๆ นอกจากคนที่อยู่ในสาย develop ก็คงจะพอเข้าใจ แต่ประโยชน์จริงๆ ของมันก็คือ ให้ Search Engine เข้าใจและจำ url ของเราได้ง่าย และยังเป็นประโยชน์กับการทำ SEO อีกด้วย หลายคนอาจจะยังงงๆ ดูตัวอย่างกันเลยดีกว่า T T'

แบบ url ปกติ

http://www.domain.me/index.php?r=site/index

ถ้าดูตาม url เราจะเข้าใจได้ว่า url นี้ รับค่าตัวแปรชื่อ r ซึ่งเก็บค่า site/index

  • site คือชื่อ controller
  • index คือชื่อ action

แบบเปิดใช้งาน Pretty Urls

http://www.domain.me/site/index

ถ้าสังเกตจะเห็นว่า มีคำว่า index.php และตัวแประ r หายไป เพราะ mod_rewrite ซ่อนไว้ และ url จะดูสั้นขึ้นมากๆ

เปิดใช้งาน

ก่อนอื่นให้ทำการคอนฟิกเพื่อเปิดการใช้งาน UrlManager ไปทีconfig/web.php ใส่โค้ดนี้เข้าไปภาพใต้ components * ShowScriptName คือ ให้แสดง index.php เราเซ็ตเป็น false เพื่อใม่ให้มันแสดง * ennablePrettyUrl คือเปิดการใช้งาน เซ็ตเป็น true เพื่อเปิดการใช้งาน

<?php
'components'=>[
//.....
'urlManager' => [
       'class' => 'yii\web\UrlManager',
       // Disable index.php
       'showScriptName' => false,
       // Disable r= routes
       'enablePrettyUrl' => true,
       'rules' => array(
              '<controller:\w+>/<id:\d+>' => '<controller>/view',
                '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
                'module/<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>',
       ),
],
//......
],
?>

สร้างไฟล์ .htaccess

สร้างไฟล์ชื่อ .htaccess ไว้ที่ web/.htaccess แล้วใส่โค้ดตามด้านล่างนี้

RewriteEngine on
# If a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward it to index.php
RewriteRule . index.php

ทดลองใช้งาน http://www.domain.me/site/index

หากยังไม่ได้ลองเช็คว่าเปิด AllowOverride All ที่ไฟล์ httpd.conf ใน server ของคุณด้วย หากไม่ได้เปิดมันจะไม่สามารถทำงานได้ครับ