如何忽略 Laravel 路由中的站点地图 url?

Posted

技术标签:

【中文标题】如何忽略 Laravel 路由中的站点地图 url?【英文标题】:How to ignore sitemap url from Laravel routing? 【发布时间】:2017-09-08 15:49:11 【问题描述】:

我在http://example.com的根目录下有sitemap.xml

当我尝试访问http://example.com/sitemap.xml 时。它显然会抛出找不到路由的错误。

所以尝试这个改变.htaccess看起来像:

Options +SymLinksIfOwnerMatch
RewriteEngine On
RewriteCond %REQUEST_URI !^/sitemap.xml
RewriteRule ^ index.php [L]

使用的 Laravel 版本:5.1。

但是,没有运气。我如何才能使用和渲染手动生成的 XML 文件,而不是从路由中提供服务?我不是在这里寻找复杂的 XML 解析理论。只是尝试一个钩子来逃避特定的路由。

【问题讨论】:

【参考方案1】:

最好的方法是将sitemap.xml 文件移动到public 目录。您甚至不必担心路由。

然后它会自动被http://example.com/sitemap.xml访问

【讨论】:

【参考方案2】:

您可以创建一个返回动态生成的站点地图的路线。您不一定需要返回文件。

例如:

您的路线:

Route::get('sitemap.xml', 'App\\Controllers\\SiteMapController@index');

您的站点地图控制器:

public function index()


    $urls = Logic::getMyUrlsToMap();
    return view('site.home.sitemap', compact('urls'));


Logic::getMyUrlsToMap() 是您搜索将被映射的 url 的逻辑。

您的 site.home.sitemap 视图:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    @if($urls)
        @foreach($urls as $url)
            <url>
                <loc>$url</loc>
            </url>
        @endforeach
    @endif
</urlset>

【讨论】:

以上是关于如何忽略 Laravel 路由中的站点地图 url?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用反应路由器生成站点地图

laravel中的动态网址?

我可以从站点地图生成 ASP.NET MVC 路由吗?

如何从 Google 电子表格中的 Google Apps 脚本自动更新“站点地图”功能?

laravel 5中的两个登录表单

Laravel 5:仅在一个 URL 上路由 CORS 问题