サイトマップをリアルタイムで生成し、サイトのすべてのページをリストするサイトマップファイルがあります。最終的にサイトには何万ものページがあるため、サイトマップの生成にはかなりのリソースが必要になるため、誰にもサイトマップにアクセスさせたくありません。私が達成しようとしているのは、サイトマップを要求する検索エンジンが適切にアクセスできるStack Exchangeの方法に似ていますが、サイトマップファイルに直接アクセスしようとすると404 not foundエラーが表示されます。
誰もがこれを行う方法について正しい方向に私を指すことができますか?生成スクリプト用にsitemap.xmlをsitemap.phpに書き換えるための書き換えルールが既に用意されているので、ファイルへのアクセスを制限するだけです。 .htaccessファイルまたはvhostファイルを使用してこれを行うことをお勧めしますが、PHPで実行する必要がある場合は、そのようにしてください。
ありがとう
検索エンジンへのアクセスを制限する1つの方法は、/sitemap-poakunmecruight.xml
などの秘密のURLでサイトマップを公開することです。 /sitemap.xml
にリダイレクトするか、robots.txtでそのURLを公開する代わりに、ウェブマスターツールを介して検索エンジンにのみサイトマップURLを送信します。そうすれば、検索エンジンだけがサイトマップの場所を知ることができます。
また、リアルタイムでサイトマップを生成するのが最善の解決策ではない可能性があることにも気付きました。 (データベースクエリのように)生成にリソースが必要な場合は、1日に1回生成することをお勧めします。 curl -s http://example.com/sitemap.php > /var/www/example.com/sitemap.xml
のようなものを実行するcronジョブをかなり簡単に書くことができます
ボットのみを許可するために、ユーザーエージェントのスニッフィングに傾いているようです。 .htaccessを使用してそれを行うことができます。 here から検索エンジンボットのリストを取得しました。
BrowserMatchNoCase adsbot-google search_engine_bot
BrowserMatchNoCase aolbuild search_engine_bot
BrowserMatchNoCase baidu search_engine_bot
BrowserMatchNoCase bingbot search_engine_bot
BrowserMatchNoCase bingpreview search_engine_bot
BrowserMatchNoCase duckduckgo search_engine_bot
BrowserMatchNoCase googlbot search_engine_bot
BrowserMatchNoCase mediapartners-google search_engine_bot
BrowserMatchNoCase msnbot search_engine_bot
BrowserMatchNoCase Slurp search_engine_bot
BrowserMatchNoCase teoma search_engine_bot
BrowserMatchNoCase yandex search_engine_bot
<Files "sitemap.php">
Order Deny,Allow
Deny from all
Allow from env=search_engine_bot
</Files>