gpt4 book ai didi

ruby-on-rails - Rails - 确保 www 在 URL 中

转载 作者:行者123 更新时间:2023-12-04 03:52:35 24 4
gpt4 key购买 nike

我的应用程序托管在 Heroku 上,并且拥有 www.mysite.com 的证书

我正在努力解决

  • 确保 www 在 URL 中,并且 URL 是 HTTPS

  • 这是我到目前为止所拥有的:
    class ApplicationController < ActionController::Base
    before_filter :check_uri

    def check_uri
    redirect_to request.protocol + "www." + request.host_with_port + request.request_uri if !/^www/.match(request.host) if Rails.env == 'production'
    end

    但这似乎不起作用。任何建议或可能不同的方法来解决以确保 HTTPs 和 www.是在网址中?

    谢谢

    最佳答案

    对于 SSL,使用 rack-ssl .

    # config/environments/production.rb
    MyApp::Application.configure do
    require 'rack/ssl'
    config.middleware.use Rack::SSL
    # the rest of the production config....
    end

    对于 WWW,创建一个 Rack middleware你自己。
    # lib/rack/www.rb
    class Rack::Www
    def initialize(app)
    @app = app
    end
    def call(env)
    if env['SERVER_NAME'] =~ /^www\./
    @app.call(env)
    else
    [ 307, { 'Location' => 'https://www.my-domain-name.com/' }, '' ]
    end
    end
    end

    # config/environments/production.rb
    MyApp::Application.configure do
    config.middleware.use Rack::Www
    # the rest of the production config....
    end

    要在浏览器中对此进行测试,您可以编辑您的 /etc/hosts本地开发计算机上的文件
    # /etc/hosts
    # ...
    127.0.0.1 my-domain-name.com
    127.0.0.1 www.my-domain-name.com

    在本地开发计算机上以生产模式运行应用程序
    $ RAILS_ENV=production rails s -p 80

    并浏览到 http://my-domain-name.com/看看会发生什么。

    在测试期间,您可能需要注释掉将您重定向到 HTTPS 站点的行。

    也可以使用许多 Rails 项目使用的标准单元测试和集成测试工具来测试这一点,例如 Test::UnitRSpec .

    关于ruby-on-rails - Rails - 确保 www 在 URL 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4372896/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com