Добавьте этот маршрут в конец вашего файла config/routes.rb
(более конкретные маршруты должны быть указаны над ним):
map.sitemap '/sitemap.xml', :controller => 'sitemap'
Создайте SitemapController
(app / controllers / sitemap_controller):
class SitemapController < ApplicationController
layout nil
def index
headers['Content-Type'] = 'application/xml'
last_post = Post.last
if stale?(:etag => last_post, :last_modified => last_post.updated_at.utc)
respond_to do |format|
format.xml { @posts = Post.sitemap } # sitemap is a named scope
end
end
end
end
- Как видите, это для блога, поэтому используется модель Post
. Это HAML шаблон представления (app / views / sitemap / index.xml.haml):
- base_url = "http://#{request.host_with_port}"
!!! XML
%urlset{:xmlns => "http://www.sitemaps.org/schemas/sitemap/0.9"}
- for post in @posts
%url
%loc #{base_url}#{post.permalink}
%lastmod=post.last_modified
%changefreq monthly
%priority 0.5
Вот и все! Вы можете проверить это, вызвав http://localhost:3000/sitemap.xml (если используете Mongrel) в браузере, или, возможно, используя cURL.
Обратите внимание, что контроллер использует метод stale?
для выдачи ответа HTTP 304 Not Modified, если нет новых сообщений, поскольку карта сайта была запрошена последним.