新手问题 Rails 的 URL 跟 Django 的 URL 的区别。Rails 的链接为啥没有 HTML 结尾

SunA0 · 2020年11月11日 · 最后由 jasl 回复于 2020年11月11日 · 393 次阅读

拿两个社区的某个链接作比较

rails:

https://ruby-china.org/topics/40441

django:

https://www.django.cn/forum/forum-1.html

习惯了 rails 之后 看到.html 结尾觉得不自然

想知道这其中的原因

只是习惯吧

愿意的话, 你可以在 nginx 上处理

或者给 link_to 打个猴子补丁 (不推荐)

piecehealth 回复

诶对欸,就是好奇为啥会这样

SunA0 回复

Rails 一个 action 能根据 Accept Type 返回不同的形式,如 html, json, xml。Accept Type 可以通过 http header 指定,也可以通过 url 后缀指定。不指定的话默认的就是 html,即 https://ruby-china.org/topics/40441 等同于 https://ruby-china.org/topics/40441.htmlrails 返回给你一个 html 页面。,告诉

带 html 结尾通常是 2 个需求:

1 SEO 的伪静态需求。早期 web 页面通常都是一串几十位的参数结尾的 url,被视为不利于 seo。

而实际上长 url 对搜索引擎收录并没有太大影响,主要是

/1?a=aaa&b=bbb
/1.html?a=aaa&b=bbb
/1.html?b=bbb&a=aaa&ref=baidu.com

这 3 个 url 会被认为是 3 个不同页面。

另外 SEO 人员认为语义化的 url 有助于 seo 排名。所以国内 SEO 站经常出现,

/chanpin/jianjie.html

这种过度 seo 的 url

2 伪装后端 web 框架信息和开发语言信息,伪装成 html 静态页面,防止垃圾程序员写出的代码被注入、webshell 攻击。 而且这种程序很多都有生成 html 的方案,前端加个 squid,代理起来也更统一,更不容易出错,也对运维人员更友好。

所以看到比较有历史的论坛程序和 cms 程序都是 /forum-1.html 这种,主要也照顾用户的惯性感受。

而 rails 团队的激进更新风格,注入、webshell 漏洞基本不会发生,一旦发现都会很快被修复。用 restful 的 url 也根本不会有对 SEO 的不友好,所以一般看不到 rails 程序的 url 有 format。

如果想要生成 html 结尾的 url,看路由一章就行,可以生成这种风格的 url,程序也能正常解析。 https://ruby-china.github.io/rails-guides/routing.html

只不过并没有什么必要。

而用 rails 开发 “产品” 的程序员层次通常比较高,合作的奇葩 SEO 人员也较少,也很不容易被 SEO 忽悠,对审美通常也有要求。所以 rails 开发的程序.html 结尾的 url 并不常见。

nine 回复

厉害啊学习了

理论上,结尾加 .html 访问是可以的

可以这样看,在你项目目录下运行 rails routes 可以打印出所有的路由

输出结果比如:

api_admin_service GET /api/admin/services/:id(.:format)

注意 (.:format) 这一段,这就是说你的 url 结尾可选的可以附加一个格式,比如 htmljson,其实这是 Rails 为什么能够一个 url 返回不同格式的秘密(在 controller 上用 respond_with 或者 respond_to 来利用这个字段,默认是 html

需要 登录 后方可回复, 如果你还没有账号请 注册新账号