2011-09-09 41 views
1

在Rails 2.3應用程序中,我有一個SitemapControllersitemap操作,該操作會創建一個可讀的站點地圖頁面,以及路由文件中的路徑。在公共文件夾中有搜索引擎的sitemap.xml文件。問題是http://mysite/sitemap服務於sitemap.xml,而不是路由到控制器。如果我刪除sitemap.xml,那麼它路由到控制器就好了。如何讓Rails路由到控制器而不是公用文件夾中的靜態文件?

在其他幾個非常相似的站點上,我們有完全相同的安排,但對於那些存在sitemap.xml的確不是而是阻止Rails路由到控制器。在這些站點上,如預期的那樣,http://mysite/sitemapSitemapController#sitemaphttp://mysite/sitemap.xml的路由將提供靜態文件。但是我一直無法發現可能導致此問題的任何差異。

任何人都可以提出什麼可能會導致這一點,或者我可能會去調試它?

回答

2

這可能是您如何託管應用程序的功能。不同的Web服務器環境具有可能影響此功能的默認設置。例如,Apache會傾向於以比應用程序調用更高的優先級來提供靜態文件,但如果您使用的是Passenger,則可以將其配置爲根本不提供靜態文件。

您改變這種方式高度依賴於您使用的網絡服務器軟件。

+1

你是對的。問題原來是Apache配置文件不同。事實證明,我們需要禁用[MultiViews](http://www.modrails.com/documentation/Users%20guide%20Apache.html#_multiviews_mod_negotiation)以與Passenger兼容。 – Mori

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 

和刪除/公共的XML。

更多信息:http://apidock.com/rails/ActionController/MimeResponds/respond_to

相關問題