ローカル環境(ラズベリーパイ)で、WordPressを使わずにHTML(厳密にはPHP)で書いてサイトを作っているのですが、サイトマップXMLをPHPで出力して自動化したいと考えました。
環境
- RaspberryPi
- Apache:2.4.25
- PHP:7.0.33
拡張子xmlの「sitemap.xml」をPHPで実行
ページのURL一覧をcsvに書いて、それをPHPで処理して「sitemap.xml」に出力します。
csv
/URL1,タイトル1
/URL2,タイトル2
/URL3,タイトル3
サイトのページタイトルをCSVを読み込んで表示させているのですが、同じcsvを使ってサイトマップも出力したら、ページの追加や更新で「sitemap.xml」を編集しなくて済みます。
PHPは拡張子「html」で実行してるので.htaccessに「.xml」を書き足すだけでした。
.htaccess
AddType application/x-httpd-php .php .html .xml
ブラウザで表示を確認。
テキストが表示されるが色分けされていない。ソースも確認してみる。
sitemap.xml
<?xml version="1.0" encoding="UTF-8" ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>
/
</loc>
<lastmod>
2019-11-28T09:30:26+09:00
</lastmod>
<priority>0.8</priority></url>
<url>
<loc>
/cycling-road/saigawa-cycling/
</loc>
<lastmod>
2019-11-28T09:30:20+09:00
</lastmod>
<priority>0.8</priority></url>
</urlset>
ソースは問題なさそうに見えるが、sitemap.xmlの表示が色分けされていないのに違和感。
sitemap.xmlの書き方はこちらを参考。
そこで、.htaccessに「.xml」を削除した。
.htaccess
AddType application/x-httpd-php .php .html
ブラウザでの表示で色が変わったがPHPで書いた文もそのまま表示される。
[<?php print(‘hogehoge’);) ?>]
これでは意味がない。
調べていたらHTTPヘッダーが「text/xml」になっている必要があるのが分かった。
Chromeのデベロッパーツールでヘッダー確認。
案の定、[Contents-Type:text/html]になっている。なので、参考にした上記サイトの方法を試して「.htaccess」を編集したが、[text/html]のまま変わらず。
そこで、PHPでHTTPヘッダーを設定できないか、また調べてみる。
HTTPヘッダーをxmlに変えるを参考。.htaccessは最初の「AddType application/x-httpd-php .php .html .xml」の状態に戻した。
php
header("Content-Type: text/xml");
header("Content-Disposition: inline");
これで表示確認。
Contents-Typeが[text/xml]に変わった。
まとめ
単純に拡張子がxmlでいいのかと思いましたが、HTTPヘッダーのContents-Typeも「xml」に設定しないと駄目でしたね。
PHPなら「header」関数で設定できます。