laravel站群下sitemap.xml应该怎么生成

admin 阅读:77 2024-02-22
如果每个域名的sitemap.xml文件内容不同,并且你希望在同一个项目下管理这些不同的sitemap.xml,你可以通过在每个域名的路由中动态生成相应的sitemap.xml来实现。以下是一个简单的示例:
// routes/web.php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\SitemapController;

// 定义sitemap.xml路由
Route::get('/sitemap.xml', [SitemapController::class, 'index']);

// 其他路由...
// app/Http/Controllers/SitemapController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Response;
use App\Models\Post;

class SitemapController extends Controller
{
    public function index(Request $request)
    {
        // 根据请求的域名或其他条件,获取相应的文章列表
        $domain = $request->getHost();
        $posts = Post::where('domain', $domain)->get();

        // 生成sitemap内容
        $sitemapContent = '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;
        $sitemapContent .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . PHP_EOL;

        foreach ($posts as $post) {
            $url = 'https://' . $domain . '/post/' . $post->id;
            $sitemapContent .= '<url>' . PHP_EOL;
            $sitemapContent .= '<loc>' . $url . '</loc>' . PHP_EOL;
            $sitemapContent .= '</url>' . PHP_EOL;
        }

        $sitemapContent .= '</urlset>';

        // 返回XML响应
        return Response::make($sitemapContent, 200, [
            'Content-Type' => 'text/xml'
        ]);
    }
}
在这个示例中,我们首先定义了一个/sitemap.xml的路由,然后根据请求的域名在SitemapController中动态生成相应的sitemap.xml内容。这样,不同域名的请求都会根据其对应的内容生成相应的sitempa.xml,从而达到区分不同域名的目的。
声明

1、部分文章来源于网络,仅作为参考。
2、如果网站中图片和文字侵犯了您的版权,请联系1943759704@qq.com处理!

搜索