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

时间:2017-04-12 18:09:59

标签: php xml laravel .htaccess routing

我在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解析理论。只是尝试一个钩子逃脱特定的路由。

2 个答案:

答案 0 :(得分:4)

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

然后它将自动显示为http://example.com/sitemap.xml

答案 1 :(得分:1)

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

例:

您的路线:

public function index()
{

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

}

您的SitemapController:

<?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>

Logic :: getMyUrlsToMap()是您搜索将要映射的网址的逻辑。

您的site.home.sitemap查看:

$('body').on('click', '.header_mobile_menu .menu-item-has-children a', function(e) {

  e.preventDefault();

  var $subMenu = $(this).siblings('.sub-menu');
  var visible  = $subMenu.is(':visible');

  if( visible ) $subMenu.fadeOut(0);
  else $subMenu.fadeIn(0);

});