มาทำ Search engine friendly URLs ด้วย .NET เทคโนโลยีทุกวันนี้ในหลายองค์กรและหลายบริษัทและหลายเว็บไซต์ที่จัดทำเพื่อเผยแพร่ข่าวสารหรือข้อมูลนั้น Information หรือ สารสนเทศทางด้าน IT จากที่เป็น Static Page HTML, XHTML ก็มาสนใจในรูปแบบ Dynamic Content หรือการ Query ข้อมูลจาก Database ที่ใช้กันซึ่งเวลาดึงข้อมูลก็จะ แสดงผลบน File เดียวแต่ต้องระบุ Parameter ที่เป็นตัวเชื่อม Primary Key ของ ตารางข้อมูลนั้นๆดังเช่น
1 |
http://www.mydomain.com/?pageid=4 |
นั่นคือ Content จะแสดงผลผ่านหน้าเว็บ .aspx โดยดึงชุดเนื้อหา จากตาราง เนื้อหาที่มี Field ของ Primary Key คือ pageid =13 ครับ ซึ่งทาง LINUX นั้นมีการจัดการ .htaccess ไฟล์ให้ Support ฟังก์ชั่น mod_rewrite ของ LINUX เพื่อแปลง parameter ให้หายไปและทำ URLs ให้สอดคล้องกับ เนื้อหาเพื่อให้เหมาะกับ Search Engine Optimizered เช่นลบเครื่องหมายจำพวก ?, &, %, +, =, $, cgi-bin, .cgi. Hence เป็นต้น
แล้วทำถ้า Hosting Server เป็น Windows ล่ะ การ Develope ต้องใช้ ASP.NET ทำ mod_rewrite ก็ไม่ได้ จะต้อง
ทำยังไงดี ก็เลยหาวิธีมาแก้ให้เป็น URLs Friendly for SEO อย่างน้อยๆ ก็ยังมี link ที่เข้าท่าอยู่
มาเริ่มกันครับเป้าหมายของเราคือ
1 |
http://www.mydomain.com/?pageid=4 |
เปลี่ยนเป็น
1 |
http://www.mydomain.com/page4.aspx |
ดูๆแล้ว น่าจะเป็นอะไรที่เข้าใจง่าย อย่างแรกเลยครับสร้างไฟล์ Global.asax แก้ไขส่วนของ event
Application_BeginRequest
ครับโดยแก้ไขดัง code ด้านล่าง
1 |
protected void Application_BeginRequest(object sender, EventArgs e) |
1 |
{ |
1 |
HttpContext incoming = HttpContext.Current; |
1 |
string oldpath = incoming.Request.Path.ToLower(); |
1 |
string pageid; // page id requested |
1 |
<br /> // Regular expressions to grab the page id from the pageX.aspx |
1 |
Regex regex = new Regex(@"page(d+).aspx", RegexOptions.IgnoreCase | |
1 |
RegexOptions.IgnorePatternWhitespace); |
1 |
MatchCollection matches = regex.Matches(oldpath); |
1 |
<br /> if(matches.Count > 0) |
1 |
{ |
1 |
// Extract the page id and send it to Process.aspx |
1 |
pageid = matches[0].Groups[1].ToString(); |
1 |
incoming.RewritePath("Process.aspx?pageid=" + pageid); |
1 |
} |
1 |
else |
1 |
// Display path if it doesn’t containt pageX.aspx |
1 |
incoming.RewritePath(oldpath |
1 |
} |
1 |
} |
จาก code ด้านบนนั้น URLs ที่มี parameter จะถูกลดรูปเหลือ pageX.aspx (X แทนที่ pageid 1,2,3,4,…) ครับ
ลองเทสดูก็ได้ครับ
1 |
<% |
1 |
string pageid = Request.QueryString["pageid"]; |
1 |
// Create the page content based on this pageid taken here |
1 |
%> |
น่าจะพอใช้งานได้จริงนะครับห