在Rails 2.3应用程序中,我有一个SitemapController
,其sitemap
动作创建了一个人类可读的站点地图页面,以及路径文件中的路径。在公共文件夹中有一个搜索引擎的sitemap.xml
文件。问题是http://mysite/sitemap
正在提供sitemap.xml
,而不是路由到控制器。如果我删除sitemap.xml
,那么它就可以很好地路由到控制器。
在其他几个非常相似的网站上,我们有完全相同的排列,但是那些sitemap.xml
的存在使不阻止Rails路由到控制器。在这些网站上,正如预期的那样,http://mysite/sitemap
和SitemapController#sitemap
的{{1}}路由服务于静态文件。然而,我一直无法发现可能导致这个问题的任何差异。
有人可以提出可能导致这种情况的原因,或者我可能会如何调试它?
答案 0 :(得分:2)
这可能与您托管应用程序的方式有关。不同的Web服务器环境具有可能影响此的默认设置。例如,Apache倾向于以比调用应用程序更高的优先级提供静态文件,但如果您使用Passenger之类的东西,它可以配置为根本不提供静态文件。
您更改此方式的方式在很大程度上取决于您使用的网络服务器软件。
答案 1 :(得分:2)
你可以这样做:
class SiteMapController
def sitemap
respond_to do |format|
format.xml { render :file => "/any/path/you/want/to/your/sitemap.xml" }
# you can then add other formats, like html, for a more human-readable response
end
end
并删除/ public中的xml。
更多信息:http://apidock.com/rails/ActionController/MimeResponds/respond_to