Mithun Shreevatsa
Mithun Shreevatsa

Reputation: 3599

How to ignore sitemap url from Laravel routing?

I have sitemap.xml in the root directory of http://example.com

When I try to access http://example.com/sitemap.xml. It obviously throws route not found error.

So to try this changed .htaccess to look like:

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

Laravel version in use: 5.1.

But, no luck. How can I just make use and render manually generated XML file rather than serving from route? I am not looking for complex XML parsing theory here. Just trying a hook to escape from the specific routing.

Upvotes: 3

Views: 2415

Answers (2)

Jean Marcos
Jean Marcos

Reputation: 1177

You can create a route that returns the dynamically generated sitemap. You do not necessarily need to return a file.

Ex.:

Your routes:

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

Your SitemapController:

public function index()
{

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

}

Logic::getMyUrlsToMap() is your logic to search for the urls that will be mapped.

Your site.home.sitemap View:

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

Upvotes: 2

Shakti Phartiyal
Shakti Phartiyal

Reputation: 6254

The best approach is to move the sitemap.xml file to the public directory. You do not even have to worry about the routing as well.

Then it will automatically be accessible as http://example.com/sitemap.xml

Upvotes: 8

Related Questions