动态生成robots.txt

时间:2016-12-02 作者:Igor Skoldin

我有一个子文件夹WP安装。它为链接到同一文件夹的多个域提供服务。在wp config中接收到请求的域。php(来自$\\u服务器变量),用于定义WP\\u SITEURL、WP\\u HOME和DOMAIN\\u CURRENT\\u站点。所以我们可以从域中打开相同的。com和域。co.uk公司。我需要将指向XML sitemap的链接添加到robots。txt,显然,它应该根据请求的域而有所不同。

有一个do\\u robots()原生WP函数可以生成机器人。txt用于多站点,并允许使用主题函数中的robots\\u txt操作动态更改它。php文件或插件。然而,单站点安装似乎并非如此。

我可以从主题函数调用do\\u robots来生成内容并向robots写入。txt文件,但不确定我应该挂在哪里。

问题是:我如何拥有这些机器人。txt动态生成,或者可以使用主题函数中的挂钩更改其内容。php?

1 个回复
最合适的回答,由SO网友:Cristiano Baptista 整理而成

我刚刚测试了\'robots_txt\' 对单个安装进行筛选,以修改虚拟/机器人的输出。WordPress显示的txt,对我来说效果很好:

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

function wpse_248124_robots_txt($output, $public) {

  return \'YOUR DESIRED OUTPUT\';
}
当你尝试接触/机器人时,真正发生了什么。txt?它是否显示默认机器人。txt内容还是404?如果您得到的是404,那么您可能有不允许/机器人的Apache或Nginx规则。txt请求通过PHP。在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 (或任何其他可用方法),确保存在以下重写规则:

robots\\.txt$ index.php?robots=1
如果没有,您应该尝试停用插件,激活默认主题并刷新重写规则,以检查重写规则是否恢复,但如果没有时间,只需将此重写规则添加到您的。htaccess:

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