Ruby on rails Rails:查找所有出现的内部404链接(Rails是否“泄漏”URL?)
我遇到了一些奇怪的事情,想知道如何在Rails中修复它 在我的应用程序中,我有一个Ruby on rails Rails:查找所有出现的内部404链接(Rails是否“泄漏”URL?),ruby-on-rails,url,http-status-code-404,Ruby On Rails,Url,Http Status Code 404,我遇到了一些奇怪的事情,想知道如何在Rails中修复它 在我的应用程序中,我有一个国家模型;它已经包含了我需要的所有国家的记录。然而,其中许多文件不包含任何数据,或者在其他方面还不相关。这些国家会产生一个404错误,如果记录一开始就不存在的话,它们会这样做: begin @country = Country.friendly.find(params[:id]) rescue ActiveRecord::RecordNotFound @country = nil e
国家
模型;它已经包含了我需要的所有国家的记录。然而,其中许多文件不包含任何数据,或者在其他方面还不相关。这些国家会产生一个404错误,如果记录一开始就不存在的话,它们会这样做:
begin
@country = Country.friendly.find(params[:id])
rescue ActiveRecord::RecordNotFound
@country = nil
end
if !@country.nil? && Country.with_data.include?(@country)
# render the view
else
render :file => "#{Rails.root}/public/404", :status => :not_found
end
因此,假设法国包含数据,而安道尔不包含数据,则应发生以下情况:
- mysite/国家/法国-->HTTP 200正常
- mysite/country/andror-->未找到HTTP 404
- 未找到mysite/country/randomstring123-->HTTP 404
routes.rb
不包括索引操作:
资源:国家,路径:“国家”,除了::索引
我生成了一个带有自定义控制器的站点地图,但它不包括有问题的国家
我的结论是,有两种可能的选择:
早期版本的站点地图控制器可能包含“空”国家/地区。谷歌最终可能仍会尝试使用它们(9个月前,一些过时网站结构中的旧URL也是如此)
否则,Rails将不得不将URL“泄漏”到这些空的国家。有什么“内部”方法来检查吗?我还将运行外部404检查,但最好知道我是否能够以某种方式获得与rake路由非常相似的有效输出
检查您的公用文件夹中是否有robots.txt
。它不明确允许或不允许任何与所讨论的模型相关的URL。您的意思是,默认情况下,所有行都会被注释?如果你想禁止这些url,你可以使用disallow
选项,使用与你的url模式匹配的正则表达式。但这既不是我方法的重点,也不能解决我最初的问题。我希望这些URL返回404(它们确实如此),而不是特别禁止应该产生404的内容。