Monday, September 21, 2020

Rewrite URLs with mod_rewrite for Apache on Ubuntu 18.04

  • เค้ามีมาตั้งนานมากแล้วพึ่งหัดทำ RESTful service จริงๆ จังๆ ก็วันนี้
  • server เป็น ubuntu 18.04 จะทำด้วย php
  • แต่ติดปัญหาเรื่อง URL มันไม่สวยตามรูปแบบ RESTful 
  • ดูตามอ้างอิงแล้วลองมั่วๆ เอานิดหน่อยก็ได้แล้ว url rewrite
  • ในที่นี้เรามี LAMP เรียบร้อยร้อยแล้ว

Step

  • เปิดใช้งาน mod_rewrite

$ sudo a2enmod rewrite

$ /etc/init.d/apache2 restart

  • ต่อมาถ้าเราใช้ config เริ่มต้นจะอยู่ที่

$ sudo nano /etc/apache2/sites-available/000-default.conf

  • เพิ่ม AllowOverride All และ Require all granted ไปไว้ใน tag ดังตัวอย่าง

  • ตัวอย่างนี้ใช้ https ของ vhost

  • หรือถ้าเราจะใช้ใน alias เราก็เอาแค่ 


  • เราตั้งค่าด้านบนไปที่พาธใหนก็ไปเพิ่ม .htaccess ตามพาธนั้นๆ
  • เช่นเราต้องการเปลี่ยน https://myhost.com/it/jui.html (เราต้องสร้าง jui.html ไว้ตามพาธ /var/xxx/it/jui.html)
  • เราจะเปลี่ยนให้เข้าเป็น https://myhost.com/it/jui
  • ให้เราสร้าง /var/xxx/it/.htaccess แล้วเพิ่ม

RewriteEngine on

RewriteRule ^jui$ jui.html [NC]

  • เปลี่ยนสิทธิ์ให้อย่างน้อย read ได้

$ sudo chmod 444 /var/xxx/it/.htaccess

  • อีกตัวอย่างของ .htaccess เราจะแสดงค่า จาก query string เช่น https://myhost.com/it/jui.php?id=2
  • เปลี่ยนให้เป็น https://myhost.com/it/jui/2
  • ตัว .htaccess ภายใต้พาธนี้จะเป็นประมาณนี้

RewriteEngine on

RewriteRule ^jui$ juuier.php [NC]


RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^/?jui/(.*?)/?$ /jui.php?id=$1 [L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /jui\.php\?id=([^\&\ ]+)

RewriteRule ^/?jui\.php$ /jui/%1? [L,R=301]

Note
  • ดูจากอ้างอิงแล้วใส่แค่ AllowOverride All โดยไม่ต้องใส่ Require all granted
  • ไว้ภายใต้ root tag หรือ alias tag ก็น่าจะเพียงพอสำหรับเปิดใช้งาน mod_rewrite แล้วคับ
Ref

  • https://www.tutsmake.com/how-to-mod_rewrite-enable-in-apache-ubuntu-18-04/
  • https://www.digitalocean.com/community/tutorials/how-to-rewrite-urls-with-mod_rewrite-for-apache-on-ubuntu-18-04
  • https://hostadvice.com/how-to/how-to-enable-apache-mod_rewrite-on-an-ubuntu-18-04-vps-or-dedicated-server/
  • https://begamatan.site/2/how-to-enable-mod-rewrite-on-ubuntu-1804-lts
  • https://tecadmin.net/enable-apache-mod-rewrite-module-in-ubuntu-linuxmint/
  • https://www.taniarascia.com/rewrite-query-string-to-path-with-htaccess/

No comments:

Post a Comment

Popular Posts