在关于人类可读 URL 的 now migrated question 中,我允许自己详细说明我的一个小爱好:
When I encounter URLs like
http://www.example.com/product/123/subpage/456.htmlI always think that this is an attempt on creating meaningful hierarchical URLs which, however, is not entirely hierarchical. What I mean is, you should be able to slice off one level at a time. In the above, the URL has two violations on this principle:
/product/123is one piece of information represented as two levels. It would be more correctly represented as/product:123(or whatever delimiter you like)/subpageis very likely not an entity in itself (i.e., you cannot go up one level from456.htmlashttp://www.example.com/product/123/subpageis "nothing").Therefore, I find the following more correct:
http://www.example.com/product:123/456.htmlHere, you can always navigate up one level at a time:
http://www.example.com/product:123/456.html— The subpagehttp://www.example.com/product:123— The product pagehttp://www.example.com/— The rootFollowing the same philosophy, the following would make sense [and provide an additional link to the products listing]:
http://www.example.com/products/123/456.htmlWhere:
http://www.example.com/products/123/456.html— The subpagehttp://www.example.com/products/123— The product pagehttp://www.example.com/products— The list of productshttp://www.example.com/— The root
我采用这种方法的主要动机是,如果每个“路径元素”(由 / 分隔)都是独立的1,您将始终能够导航到“parent”,只需删除 URL 的最后一个元素。当我想转到父目录时,这就是我(有时)在我的文件资源管理器中所做的。按照相同的逻辑,用户(或搜索引擎/爬虫)可以做同样的事情。我认为非常聪明。
另一方面(这是问题的重要部分):虽然我永远无法阻止用户尝试访问他自己截断的 URL,我是不是错了断言(并尊重)搜索引擎可能会做同样的事情? 即,是否有理由期望没有搜索引擎(或实际上:谷歌)会尝试访问 http://www.example。 com/product/123/subpage(上面第 2 点)? (还是我真的只考虑了人为因素?)
这不是关于个人偏好的问题。这是关于我对爬虫/索引器的期望以及在设计 URL 时我应该在多大程度上考虑非人类 URL 操作的技术问题。
此外,http://www.example.com/product/123/subpage/456.html 的结构“深度”为 4,其中 http://www。 example.com/products/123/456.html 只有 3。有传言说这个深度会影响搜索引擎排名。至少,有人告诉我。 (现在很明显,搜索引擎优化不是我最了解的。)这(还是?)是真的吗:层级深度(目录数量)会影响搜索排名吗?
那么,我的“直觉”在技术上是否合理,还是我应该把时间花在其他事情上?
示例:(几乎)正确地做事
Good ol' SO 几乎是正确的。恰当的例子:配置文件,例如 http://stackoverflow.com/users/52162:
http://stackoverflow.com/users/52162 — 单一配置文件http://stackoverflow.com/users — 用户列表http://stackoverflow.com/ — 根目录但是,配置文件的 canonical URL 实际上是 http://stackoverflow.com/users/52162/jensgram 这似乎是多余的(在两个层次结构级别上表示相同的端点)。备选方案:http://stackoverflow.com/users/52162-jensgram(或任何其他一贯使用的分隔符)。
1) 包含不依赖于“更深”元素的完整信息。
最佳答案
“http://www.example.com/product:123/456.html”这种分层 url 与“http://www.example.com/product/123/subpage”一样无用,因为当用户看到您的网址时,他们不关心您数据库中的标识符,他们想要有意义的路径。这就是 StackOverflow 将问题标题放入 url 的原因:“http://stackoverflow.com/questions/4017365/human-readable-urls-preferably-hierarchical-too”。
Google 建议不要替换像“http://www.example.com/?product=123&page=456”这样的常用查询,因为当每个站点都开发自己的方案时,抓取工具不知道每个部分的含义,重要与否。 Google 发明了复杂的机制来查找重要的参数并忽略不重要的参数,这意味着您将获得更多页面到索引中并且重复的页面会更少。但是,当 Web 开发人员发明自己的方案时,这些算法往往会失败。
如果您同时关心用户和爬虫,您应该改用这样的网址:
此外,搜索引擎对 url 中包含关键字的页面给予更高的评级。
关于url - 人类可读的 URL : preferably hierarchical too?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4017365/
从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.
我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些
我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.
如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b
我正在使用Dragonfly在Rails3.1应用程序上处理图像。我正在努力通过url将图像分配给模型。我有一个很好的表格:{:multipart=>true}do|f|%>RemovePicture?Dragonfly的文档指出:Dragonfly提供了一个直接从url分配的访问器:@album.cover_image_url='http://some.url/file.jpg'但是当我在控制台中尝试时:=>#ruby-1.9.2-p290>picture.image_url="http://i.imgur.com/QQiMz.jpg"=>"http://i.imgur.com/QQ
除了协议(protocol)定义中的斜杠('http[s]://'、'ftp://'等)之外,我想替换URL中的所有多个斜杠。我该怎么做?此代码无一异常(exception)地替换:url.gsub(/\/\/+/,'/') 最佳答案 您只需排除任何以:开头的匹配项url.gsub(/([^:])\/\//,'\1/') 关于ruby正则表达式:replacedoubleslashesinURL,我们在StackOverflow上找到一个类似的问题: http
给定一个文本,我想删除url部分并保留其他文本。例子:'blablabla...blablabla...http://bit.ly/someuriblablabla...'成为'blablabla...blablabla...blablabla...'是否有任何ruby内置方法可以有效地执行此操作? 最佳答案 尝试使用正则表达式:(?:f|ht)tps?:\/[^\s]+ 关于ruby-使用ruby从文本中删除url,我们在StackOverflow上找到一个类似的问题:
目前我正在使用这个正则表达式从YoutubeURL中提取视频ID:url.match(/v=([^&]*)/)[1]我怎样才能改变它,以便它也可以从这个没有v参数的YoutubeURL获取视频ID:http://www.youtube.com/user/SHAYTARDS#p/u/9/Xc81AajGUMU感谢阅读。编辑:我正在使用ruby1.8.7 最佳答案 对于Ruby1.8.7,这就可以了。url_1='http://www.youtube.com/watch?v=8WVTOUh53QY&feature=feedf'url