【问题标题】:Canonicalization in Rails - routing or .htaccess?Rails 中的规范化 - 路由或 .htaccess?
【发布时间】:2011-02-14 23:06:12
【问题描述】:

我有一个即将启动的网站,并且已提出 URL 规范化请求。我想知道在我的 RoR 应用程序中让 http://www.example.com 的所有请求永久重定向(301)到 http://example.com 的最佳方式是什么?或者,换一种方式问,我怎样才能去掉“www”。来自所有生成的 url、路径、请求?

仅供参考,这是一个 Rails 3 应用程序。

【问题讨论】:

  • 刚刚注意到您需要在 RoR 应用程序中执行此操作。您可以在应用程序控制器中执行 before 回调并检查请求的标头并重定向是否是 www 版本。但是,如果不是绝对必要,我不建议这样做,因为当 www 请求可以由(轻量级)前端 Web 服务器(如 nginx 或 apache)处理时,Rails 堆栈会不必要地处理它。

标签: ruby-on-rails ruby-on-rails-3 routing canonical-link


【解决方案1】:

这是使用网络服务器中的重写规则完成的。

对于 nginx:http://techtitbits.com/2010/07/wwwno-www-rewrite-rules-for-nginx/

对于 Apache:http://www.boutell.com/newfaq/creating/withoutwww.html

另外请注意,您应该将两条 A 记录添加到您的 DNS 区域文件中,如下所示

@ IN A 10.0.0.1
www IN A 10.0.0.1

将 10.0.0.1 替换为您的 IP 地址。

【讨论】:

    【解决方案2】:

    对于 Apache,您可以将以下代码添加到您的 ROR 应用程序的 /public/.htaccess 文件中。 我在我的大多数应用程序中都使用它,因为我不喜欢“www”

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    RewriteRule ^(.*) http://%1/$1 [R=301,L]
    

    希望对你有帮助

    【讨论】:

    • 我没有尝试在 Rails 应用程序本身中处理这个问题,而是选择了这个标准的 .htaccess 解决方案。谢谢
    猜你喜欢
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2013-08-21
    • 2010-12-29
    相关资源
    最近更新 更多