Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:查找所有出现的内部404链接(Rails是否“泄漏”URL?)_Ruby On Rails_Url_Http Status Code 404 - Fatal编程技术网

Ruby on rails Rails:查找所有出现的内部404链接(Rails是否“泄漏”URL?)

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

我遇到了一些奇怪的事情,想知道如何在Rails中修复它

在我的应用程序中,我有一个
国家
模型;它已经包含了我需要的所有国家的记录。然而,其中许多文件不包含任何数据,或者在其他方面还不相关。这些国家会产生一个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
这一切都很好。然而,奇怪的是,当我在谷歌网站管理员工具中跟踪我的网站时,它实际上知道一些指向“空”国家的URL,并向我显示它们为404,产生“爬行错误”。(例如,它知道mysite/country/andror)我看不到的是谷歌从哪里获得这些URL。这些链接也不包括在WT的“内部链接”部分中,因此这没有帮助

routes.rb
不包括索引操作:
资源:国家,路径:“国家”,除了::索引

我生成了一个带有自定义控制器的站点地图,但它不包括有问题的国家

我的结论是,有两种可能的选择:

  • 早期版本的站点地图控制器可能包含“空”国家/地区。谷歌最终可能仍会尝试使用它们(9个月前,一些过时网站结构中的旧URL也是如此)
  • 否则,Rails将不得不将URL“泄漏”到这些空的国家。有什么“内部”方法来检查吗?我还将运行外部404检查,但最好知道我是否能够以某种方式获得与rake路由非常相似的有效输出

  • 检查您的公用文件夹中是否有
    robots.txt
    。它不明确允许或不允许任何与所讨论的模型相关的URL。您的意思是,默认情况下,所有行都会被注释?如果你想禁止这些url,你可以使用
    disallow
    选项,使用与你的url模式匹配的正则表达式。但这既不是我方法的重点,也不能解决我最初的问题。我希望这些URL返回404(它们确实如此),而不是特别禁止应该产生404的内容。