จากบทความทีแล้ว ที่พูดถึงการทำ 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!
อธิบายคร่าวๆคือ เมื่อมีการ 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
พอจะเห็นภาพกันไหมครับ
ภาพประกอบ
ยังไงถ้าหากบทความมีจุดอ่อนหรือปัญหา รบกวนช่วยกันคอมเม้นมาทีนะครับ เพราะก็ยังไม่ได้เชี่ยวชาญมากครับ มีผิดพลาดกันได้
\^_^/
Leave a Reply