我有一条像“http://example.com/sites/example.com”这样的路线
get "/sites/:domainname", :to => 'controller#action', :constraints => { :domainname => /.*/ }
它一直有效,直到生成缓存页面public / sites / example.com(而不是public / sites / example.com.html),此时它会要求用户保存.com文件。如何将缓存页面保存为,例如公共/网站/ example.com.html?或者可能有不同的解决方法。
答案 0 :(得分:0)
查看源代码,caches_page
自动假定缓存文件的扩展名应该是路径包含句点(.
)时找到的“扩展名”。这个逻辑实际上是另一种方法,page_cache_file
:
def page_cache_file(path, extension)
name = (path.empty? || path == "/") ? "/index" : URI.parser.unescape(path.chomp('/'))
unless (name.split('/').last || name).include? '.'
name << (extension || self.page_cache_extension)
end
return name
end
如果需要,您可以覆盖此方法以在控制器中稍微不同地操作,或者使用默认的ActionController :: Base实现。这是一个可能的例子:
class MyController < ApplicationController
class << self
private
# override the ActionController method
def page_cache_file(path, extension)
# use the default logic unless this is a /sites/:domainname request
# (may need to tweak the regex)
super unless path =~ %r{/sites/.*}
# otherwise customize logic to always include the extension
name = (path.empty? || path == "/") ? "/index" : URI.parser.unescape(path.chomp('/'))
name << (extension || self.page_cache_extension)
return name
end
end
end
答案 1 :(得分:0)
目前的解决方法是在路由中强制使用html扩展名:
get "/sites/:domainname.html", :to => "sites#show", :as => :site, :constraints => { :domainname => /.*/ }
这会导致public/sites/example.com.html
保存在缓存中。