1

在 Rails 2.3 应用程序中,我有一个SitemapController带有sitemap创建人类可读站点地图页面的操作,以及路由文件中指向该页面的路由。在公用文件夹中有一个sitemap.xml用于搜索引擎的文件。问题是http://mysite/sitemap正在服务sitemap.xml,而不是路由到控制器。如果我删除sitemap.xml,那么它会很好地路由到控制器。

在其他几个非常相似的站点上,我们有完全相同的安排,但在那些站点上,Rails 的存在sitemap.xml并不妨碍Rails 路由到控制器。在这些站点上,正如预期的那样,http://mysite/sitemap路由SitemapController#sitemaphttp://mysite/sitemap.xml提供静态文件。然而,我一直无法发现可能导致此问题的任何差异。

谁能建议可能导致这种情况的原因,或者我该如何调试它?

4

2 回答 2

2

这可能与您托管应用程序的方式有关。不同的 Web 服务器环境具有可能影响这一点的默认值。例如,Apache 倾向于以比调用您的应用程序更高的优先级来提供静态文件,但如果您使用像 Passenger 之类的东西,它可以配置为根本不提供静态文件。

您更改此设置的方式高度依赖于您使用的 Web 服务器软件。

于 2011-09-09T16:32:06.623 回答
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

于 2011-09-09T17:28:05.953 回答