Redirect URLs ด้วย Nginx

Page not found

ไปดู report ของเว็บ อักษรย่อ.com มา พบว่ามี broken link เยอะมาก เนื่องจากมีการปรับ structure url ใหม่ ทำให้ link เก่า ๆ ที่เป็นที่จดจำของผู้ใช้บางอันไม่มีอยู่บนเว็บเวอร์ชันใหม่

ถ้าปล่อยทิ้งไว้อย่างนั้นคงไม่เป็นผลดีแน่ จึงได้เวลาแก้ไขมันให้ไปถูกที่ถูกทางละ

นั่งนึกดูมันก็พอจะมีหลายวิธีที่แก้ไขเรื่องนี้ได้นะ เช่น ทำ redirect rule ใน code ไว้เลย หรือจะให้ web server จัดการให้

การทำ redirect rule ไว้ใน code มันก็จะมีข้อกวนใจหน่อยนึง ตรงที่ต้อง build source code แล้ว deploy ใหม่นั่นแหละ <- ตัดทิ้ง

เลยลองมาดูกันว่า web server พอจัดการยังไงได้บ้าง

Redirect URLs with Nginx

ใน Nginx จะมี map module ที่เปิดให้เราทำการกำหนดค่าเป็นคู่ ๆ ได้ จึงสามารถเอามาประยุกต์ใช้งานได้

nginx.conf

map_hash_bucket_size 256; # ใส่เพื่อให้รองรับ url ยาว ๆ ได้
map $request_uri $new_uri {
    include /etc/nginx/url.map;
}

server {
    listen       80;
    server_name  _;

    ...
    if ($new_uri) {
       return 301 $new_uri;
    }
    ...    
}

url.map

/old-url /new-url;
/deep/old-url /new-url;
...

เรียบร้อย ลองทดสอบกันได้เลย