Redirect ด้วยการใช้ rewrite บน nginx

จากบทความทีแล้ว ที่พูดถึงการทำ Redirect แบบ server block จาก domain หนึ่งไปหาอีก domain หนึ่ง

คราวนี้เราจะมาพูดถึงการใช้คำสั่ง rewrite มาเพื่อ Redirect จาก domain เดียวกันแต่จะทำการเปลี่ยน slug (slug คือ สิ่งที่ต่อท้ายจาก domain หลัง “/”) ในการทำงานของผมนั้นจะยุ่งเกี่ยวกับการทำ SEO ให้กับลูกค้าด้วย ซึ่งเค้าอาจจะมี URL มาชุดหนึ่งที่ได้ซื้อมา แล้วต้องการให้ traffic ที่เข้ามานั้น ถูก redirect ไปยัง url ที่ต้องการ

ในที่นี้ผมจะยกตัวอย่างโดยการที่ผมจะ redirect จาก rules ชุดหนึ่ง คือ
http://sites1.com/blog-for-something/ ไปที่ http://sites1.com/blog/
http://sites1.com/who-am-i/ ไปที่ http://sites1.com/about-us/
http://sites1.com/eiei/ ไปที่ http://sites1.com/blog/

โดยผมจะเริ่มจากการเข้าไปสร้างไฟล์ config ที่ /etc/nginx/conf.d/sites1.conf เป็นไฟล์ config ที่เราจะมาลองเล่นกัน

โดยตัวรูปแบบคำสั่งนั้น บนเว็บไซต์ของ nginx เองมีอธิบายไว้ตามนี้ครับ

rewrite regex URL [flag];

ในส่วนของ [flag] เราสามารถใส่ได้ว่าต้องการให้เป็นแบบ permarnant (301) หรือ redirect (302) อ่านเพิ่มเติมได้ ที่นี่
โดยจะใช้โค้ดเราจะทำการ Permanent (302) เพื่อให้ SEO ส่งผลไปยัง URL ใหม่ จะได้ตามนี้ครับ


server {
        listen 80;
        server_name sites1.com;

        rewrite ^/blog-for-something/(.*)$ /blog/$1 permanent;
        rewrite ^/who-am-i/(.*)$ /about-us/$1 permanent;
        rewrite ^/eiei/(.*)$ /blog/$1 permanent;
}

อย่าลืม validate config ก่อนนะครับ

nginx -t

แล้วก็รีโหลดดดดด

sudo service nginx reload

Wow!

redirect1
http://sites1.com/blog-for-something/ ไปที่ http://sites1.com/blog/
redirect2
http://sites1.com/who-am-i/ ไปที่ http://sites1.com/about-us/
redirect3
http://sites1.com/eiei/ ไปที่ http://sites1.com/blog/

 

อธิบายคร่าวๆคือ เมื่อมีการ request มาที่ sites1.com จะผ่าน regex ใน rewrite นั่นคือ เมื่อมี slug ที่ตรงกับที่เราระบุไว้ จะทำการ redirect ไป ส่วน $1 นั่นคือ สิ่งที่ต่อท้ายจาก rules ที่โดนแก้ ให้นำมาต่อหลัง URL ที่แก้แล้ว
ตัวอย่างเช่น

request เข้ามาเป็น

http://sites1.com/blog-for-something/text-after-regex-match-rules

จะถูกแก้เป็น

http://sites1.com/blog/text-after-regex-match-rules

พอจะเห็นภาพกันไหมครับ
ภาพประกอบ

redirect4

ยังไงถ้าหากบทความมีจุดอ่อนหรือปัญหา รบกวนช่วยกันคอมเม้นมาทีนะครับ เพราะก็ยังไม่ได้เชี่ยวชาญมากครับ มีผิดพลาดกันได้
\^_^/

 


Posted

in

, , ,

by

Tags:

Comments

One response to “Redirect ด้วยการใช้ rewrite บน nginx”

  1. proxumer Avatar

    ขอบคุณครับ

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.