web-dev-qa-db-ja.com

Robots.txtを動的に生成する

サブフォルダWPインストールがあります。同じフォルダにリンクされている複数のドメインを提供します。要求されたドメインは($ _SERVER変数から)wp-config.phpで受信され、WP_SITEURL、WP_HOMEおよびDOMAIN_CURRENT_SITEを定義するために使用されます。だから私たちはdomain.comとdomain.co.ukの両方から同じことを開くことができます。私はrobots.txtにXMLサイトマップへのリンクを追加する必要があります、そして、明らかに、それは要求されたドメインによって異なるはずです。

マルチサイト用のrobots.txtを生成し、テーマのfunctions.phpファイルまたはプラグインからrobots_txtアクションを使用して動的に変更できるdo_robots()ネイティブWP関数があります。ただし、シングルサイトインストールの場合はそうではありません。

テーマ関数からdo_robotsを呼び出してコンテンツを生成し、robots.txtファイルに書き込むことができますが、どこにフックすればよいのかわかりません。

問題は、robots.txtを動的に生成する方法や、テーマfunctions.phpからフックを使用してその内容を変更する方法を教えてください。

3
Igor Skoldin

私はWordPressが表示する仮想/robots.txtの出力を変更するために単一のインストールで 'robots_txt' フィルターをテストしたところ、うまくいきました。

add_filter('robots_txt', 'wpse_248124_robots_txt', 10,  2);

function wpse_248124_robots_txt($output, $public) {

  return 'YOUR DESIRED OUTPUT';
}

/robots.txtに到達しようとしたとき、本当に何が起きていますか?デフォルトのrobots.txtコンテンツまたは404が表示されますか。 404になっているのであれば、/robots.txtリクエストがPHPを通過することを許可していないApacheまたはNginxのルールがあるかもしれません。 nginxの設定でこのようなことをするのは非常に一般的です:

# Don't log access to /robots.txt
location = /robots.txt {
    access_log    off;
    log_not_found off;
}

これを次のように置き換える必要があります。

# Don't log access to /robots.txt
location = /robots.txt {
    try_files     $uri $uri/ /index.php?$args;
    access_log    off;
    log_not_found off;
}

また、 Rewrite Rules Inspector (または他の利用可能な方法)を使用して、WordPress自身の内部書き換えルールが正しく機能しているかどうかを確認する必要があります。

robots\.txt$ index.php?robots=1

そうでない場合は、プラグインを無効にし、デフォルトのテーマを有効にして書き換えルールをフラッシュして書き換えルールが戻ってきたかどうかを確認する必要があります。

RewriteRule robots\.txt$ index.php?robots=1
2