ปัญหาเกิดจากการที่ผมต้องการจะทำ sitemap xml โดยที่ link ในเว็บผมนั้นมีหลายแบบมากมาย จึงต้องใช้ php ในการดึงข้อมูลจากฐานข้อมูลมาสร้างเป็นลิ้งค์ ซึ่งในไฟล์ .xml มันไม่สามารถที่จะเขียนโค้ด php เข้าไปได้อยู่แล้ว
วิธีแก้คือจะต้องใช้ mod rewrite เป็นตัวช่วยในการจัดการ เพราะว่าเราะจะต้องเขียนไฟล์ เป็น sitemap.php แล้วใช้ mod rewrite เป็นตัวแปลง url เวลาเรียกผ่าน url : http://xxx.com/sitemap.xml ให้ไปเรียกการทำงานที่ http://xxx.com/sitemap.php นั่นเอง
ตัวอย่างโค้ดในไฟล์ php เขียนดังนี้
<?php
header("Content-type: text/xml");
echo '<?xml version="1.0" encoding="UTF-8" ?>';
$site_url = "http://www.xxx.com/";
?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84 http://www.google.com/schemas/sitemap/0.84/sitemap.xsd">
<url>
<loc><?=$site_url; ?>page1</loc>
<lastmod>2015-09-22</lastmod>
<changefreq>Daily</changefreq>
<priority>1.00</priority>
</url>
<url>
<loc><?=$site_url; ?>page2</loc>
<lastmod>2015-09-22</lastmod>
<changefreq>Weekly</changefreq>
<priority>1.00</priority>
</url>
</urlset>
ซึ่งในส่วนของ <url>…</url> ส่วนนี้เราก็จะดึงข้อมูลจากฐานข้อมูลมาวนลูปใส่ได้เลย
ตัวอย่างไฟล์ผลลัพธ์ sitemap.php เมื่อเขียนเสร็จแล้ว
ขั้นสุดท้ายคือ ทำ mod rewrite โดยใส่โค้ดตามด้านล่างนี้ลงในไฟล์ .htaccess
RewriteEngine On
RewriteRule ^sitemap.xml /sitemap.php
อัพทุกอย่างขึ้นโฮสต์แล้วก็ลองเรียก http://xxx.com/sitemap.xml จะได้ผลลัพธ์ดังรูป เป็นอันว่าสำเร็จคับ