如何在Laravel中拥有不同的robots.txt文件子域和主域?

gr8qqesn  于 2023-04-13  发布在  其他
关注(0)|答案(3)|浏览(188)

我有一个laravel项目,它在routes/web.php中有一个主域和一个子域,如下所示:

Route::group(array('domain' => '{account}.example.com'), function() {
    // subdomain routes
});

Route::group(array('domain' => 'example.com'), function() {
    // domain routes
});

我怎么能分开robots.txt文件的主域和子域?如果你去的路径robots.txt,域和子域返回相同的文件. Laravel读取默认文件在公共文件夹.

zaqlnxep

zaqlnxep1#

好的。NGINX的解决方案。
服务器前部分:

map $host $robots_file {
  default robots.txt;
  site.com robots-site.txt;
  www.site.com robots-site.txt;
}

内部服务器部分:

location = /robots.txt {
  try_files /$robots_file =404;
}
lfapxunr

lfapxunr2#

您可以在Apache服务器上使用的一个解决方案是创建一个自定义规则,根据子域路由robots.txt。
您可以在public文件夹中保存两个robots文件,例如robots.txtrobots-disallow.txt
robots.txt:

User-agent: *
Disallow:

robots-disallow.txt:

User-agent: *
Disallow: /

public/.htaccess文件中,创建一个新规则,该规则将指示如果请求是指向指定的子域之一,则robots.txt的路径将显示robots-disallow.txt的内容,否则将显示robots.txt文件的原始内容。

.htaccess:

<IfModule mod_rewrite.c>
     RewriteEngine on
     RewriteCond %{HTTP_HOST} ^sub1|sub2\.domain\.com$
     RewriteRule ^robots\.txt$ robots-disallow.txt
</IfModule>

这样,当访问www.example.com时sub1.domain.com,将显示站点Map,指示内容不应被索引,并且在主域中显示一般robots.txt。
此解决方案不仅适用于Laravel,而且适用于任何apache环境

w3nuxt5m

w3nuxt5m3#

我认为你可以在Laravel文档中这样做

Route::domain('{account}.example.com')->group(function () {
    Route::get('user/{id}', function ($account, $id) {
        //
    });
});

相关问题