如何忽略 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?的主要内容,如果未能解决你的问题,请参考以下文章