true, 'languages' => false, 'smartypants' => [ 'attr' => 1, 'doublequote.open' => '« ', 'doublequote.close' => ' »', 'doublequote.low' => '„', 'singlequote.open' => '‘', 'singlequote.close' => '’', 'backtick.doublequote.open' => '“', 'backtick.doublequote.close' => '”', 'backtick.singlequote.open' => '‘', 'backtick.singlequote.close' => '’', 'emdash' => '—', 'endash' => '–', 'ellipsis' => '…', 'space' => '(?: | | |�*160;|�*[aA]0;)', 'space.emdash' => ' ', 'space.endash' => ' ', 'space.colon' => ' ', 'space.semicolon' => ' ', 'space.marks' => ' ', 'space.frenchquote' => ' ', 'space.thousand' => '', 'space.unit' => ' ', 'guillemet.leftpointing' => '«', 'guillemet.rightpointing' => '»', 'geresh' => '׳', 'gershayim' => '״', 'skip' => 'pre|code|kbd|script|style|math', ], 'routes' => [ [ 'pattern' => 'sitemap.xml', 'action' => function() { $pages = site()->pages()->index(); // fetch the pages to ignore from the config settings, // if nothing is set, we ignore the error page $ignore = kirby()->option('sitemap.ignore', ['error']); $content = snippet('sitemap', compact('pages', 'ignore'), true); // return response with correct header type return new Kirby\Cms\Response($content, 'application/xml'); } ], [ 'pattern' => 'sitemap', 'action' => function() { return go('sitemap.xml', 301); } ], ] ];