自動的に更新されるサイトマップを作成しようとしています。 RSSフィードで同様のことを行いましたが、このサイトマップは機能しません。 http://designdeluge.com/sitemap.xml でライブで表示できます。主な問題は、PHPコードを認識しないことです。ここに完全なソースがあります:
<?php
include 'includes/connection.php';
header("Content-type: text/xml");
echo '<?xml version="1.0" encoding="UTF-8" ?>';
?>
<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>http://designdeluge.com/</loc>
<lastmod>2010-04-20</lastmod>
<changefreq>weekly</changefreq>
<priority>1.00</priority>
</url>
<url>
<loc>http://designdeluge.com/about.php</loc>
<lastmod>2010-04-20</lastmod>
<changefreq>never</changefreq>
<priority>0.5</priority>
</url>
<?php
$entries = mysql_query("SELECT * FROM Entries");
while($row = mysql_fetch_assoc($entries)) {
$title = stripslashes($row['title']);
$date = date("Y-m-d", strtotime($row['timestamp']));
echo "
<url>
<loc>http://designdeluge.com/".$title."</loc>
<lastmod>".$date."</lastmod>
<changefreq>never</changefreq>
<priority>0.8</priority>
</url>";
} ?>
</urlset>
問題は、動的URL(DBからプルされたものなど)が生成されず、サイトマップが検証されないことです。ありがとう!
EDIT:現時点では、コード自体を機能させようとしています。ローカルテストサーバーでPHPファイルとして設定しました。上記のコードが使用されています。現時点では、何も画面にもソースにも表示されません。構文エラーを犯したと思っていますが、何も見つかりません。どんな助けもありがたいです!
編集2:わかりました。どうやら、私はPHPでXML宣言をエコーする必要がありました。最終的なコードは上記に掲載されています。ご協力いただきありがとうございます!
生成されたsitemap.xml
を確認すると(ブラウザでソースを表示するなどを使用して)、次のように表示されます。
<?php header('Content-type: text/xml'); ?>
<?xml version="1.0" encoding="UTF-8" ?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84" xmlns:xsi="http:/
...
その出力にある<?php
は、PHPコードが解釈されないことを示しています。
これはおそらくWebサーバーが.xml
をPHP code。
少なくとも2つの可能な解決策:
sitemap.php
などに変更します。
別のソリューションを追加します:
sitemap.php
ファイルを用意するsitemap.xml
URLが実際にsitemap.php
ファイルを指すようにしますこれで、ニース(必須?)であるsitemap.xml
URLが得られますが、コードはsitemap.php
にあるため、解釈されます。
Apacheのmod_rewrite
を参照してください。
私はウィリアムのコードを使用しました(ありがとう)といくつかの小さな変更を加えるとうまくいきました。
私は次のように思います:
header("Content-type: text/xml");
上から2行目<?php
ちなみに、それをコピーする他の人への小さなポイントですが、最初の行の<?php
の前に単一のスペース文字があります-私がしたように不注意でコピーした場合、コードが機能しない理由を理解してください!
MySql selectステートメントも少し調整する必要がありました。
最後に、出力では変数$ domainを使用したので、このコードを考える必要なしにテンプレートとして使用できます(毎回同じテーブル名を使用する場合)。 variabeは、データベースに接続するために含まれているconnectdb.phpファイルに追加されます。
これが、Williamのコードの実際のバージョンです。
<?php
header("Content-type: text/xml");
echo '<?xml version="1.0" encoding="UTF-8" ?>';
include 'includes/connectdb.php';
?>
<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>http://www.DOMAIN.co.uk/</loc>
<priority>1.00</priority>
</url>
<?php
$sql = "SELECT * FROM pages WHERE onshow = 1 ORDER BY id ASC";
$result = mysql_query($sql,$conn);
while($row = mysql_fetch_array($result))
{
$filename = stripslashes($row['filename']);
?>
<url>
<loc>http://www.<?php echo "$domain"; ?>/<?php echo "$filename" ?></loc>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<?php } ?>
</urlset>
最善の解決策は、Apache .htaccess
ファイルのRewriteEngine On
の後に次の行を追加することです。
RewriteRule ^sitemap\.xml$ sitemap.php [L]
次に、ルートフォルダーにファイルsitemap.php
を置くだけで、通常はすべての検索エンジンが最初に検索するデフォルトのURLであるhttp://yoursite.com/sitemap.xml
を介してアクセスできます。
ファイルsitemap.php
は
<?php header('Content-type: application/xml; charset=utf-8') ?>
<?php echo '<?xml version="1.0" encoding="UTF-8"?>' ?>
できます :)