【问题标题】:Redirect www to the main domain without www with 301使用 301 将 www 重定向到不带 www 的主域
【发布时间】:2015-02-24 05:01:37
【问题描述】:

我有一个主域“my_domain.com”和几个子域(“sub1.my_domain.com”、“sub2.my_domain.com”...)。可以将主域请求为“my_domain.com”和“www.my_domain.com”。

我需要将状态为 301 的所有请求从“www.domain.com/.../any_url”重定向到“domain.com”。或者,最好是来自“www.domain.com/”的所有请求.../any_url”到“domain.com/.../any_url”。

我已经阅读了一些教程,但不明白什么是标准和最简单的方法。该网站正在使用 Rails、Passenger、Apache 和 Linux。

这是我在 /etc/apache2 中的内容

root@my_user# ls -al 
total 88
drwxr-xr-x   7 root root  4096 Dec 26 19:22 .
drwxr-xr-x 111 root root  4096 Dec 23 03:27 ..
-rw-r--r--   1 root root  8346 Feb  6  2012 apache2.conf
drwxr-xr-x   2 root root  4096 Dec 26 19:09 conf.d
-rw-r--r--   1 root root  1322 Feb  6  2012 envvars
-rw-r--r--   1 root root     0 Dec 26  2013 httpd.conf
-rw-r--r--   1 root root 31063 Feb  6  2012 magic
drwxr-xr-x   2 root root 12288 Apr 16  2014 mods-available
drwxr-xr-x   2 root root  4096 Dec 30  2013 mods-enabled
-rw-r--r--   1 root root   750 Feb  6  2012 ports.conf
drwxr-xr-x   2 root root  4096 Sep 22 13:22 sites-available
drwxr-xr-x   2 root root  4096 Sep 22 13:22 sites-enabled

我该怎么做?如何通过 mod_rewrite、apache2.conf、/etc/apache2/sites-available/my_domain.com 或使用其他方式来实现?我很困惑。

更新:

# ls -al /etc/apache2/sites-available
total 32
drwxr-xr-x 2 root root 4096 Sep 22 13:22 .
drwxr-xr-x 7 root root 4096 Dec 26 19:22 ..
-rw-r--r-- 1 root root 2716 May 16  2014 my_site-old
-rw-r--r-- 1 root root 1499 Sep 22 13:22 my_site.my_domain123.com
-rw-r--r-- 1 root root  950 Feb  6  2012 default
-rw-r--r-- 1 root root 7469 Feb  6  2012 default-ssl
-rw-r--r-- 1 root root 1511 Dec 30  2013 puppetmaster

【问题讨论】:

    标签: ruby-on-rails ruby apache redirect passenger


    【解决方案1】:

    你可以尝试使用rack-rewritegem

    【讨论】:

      【解决方案2】:

      Refer this 加载 mod_rewrite。

      在您定义ServerName www.domain.com的地方使用以下规则

      <VirtualHost *:80>
      
        ServerName www.domain.com
        # Your existing customizations
        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC]
        RewriteRule ^(.*)$ http://domain.com$1 [R=301,L]
      
      </VirtualHost>
      

      【讨论】:

      • 谢谢。 1) 的路径是什么 2) 我必须在哪里写 Use below rule where you have defined... - 在哪个文件中?
      • 请参阅this 以启用 mod_rewrite。在sites-available 下查找.conf 文件。不确定您是否在default.conf 中有www.domain.com 的配置,或者您有一个单独的.conf 文件。在同一位置查看您的 .conf 文件,并在 conf 文件中使用该规则,其中显示 ServerName www.domain.com
      • Review your .conf file under same location - 哪个 conf 文件,在什么位置?我已经更新了我的问题,请看一下。
      • 如果您不知道正确的文件名,请检查sites-available 下的所有conf 文件。尝试在每个.conf 文件中找到ServerName www.domain.com。如果不查看文件内容,很难判断哪个 conf 文件需要更改。
      • 如您所见,sites-available 目录下根本没有conf文件。
      【解决方案3】:

      我是这样做的: 编辑 application_controller.rb,以便您可以将“过滤器”应用于所有其他控制器。

      root@Ecommerce:/# nano /home/NAMEAPP/app/controllers/application_controller.rb
      

      到文件中,把这个:

      class ApplicationController < ActionController::Base
      before_filter :redirect_subdomain
      
          def redirect_subdomain
            if request.host == 'www.dominio.cl'
              redirect_to 'http://dominio.cl' + request.fullpath
            end
          end
      end
      

      【讨论】:

      • pero a mi no me gusta eso。 lo siento。
      • 有没有? algún tema de desempeño o simple gusto?.萨卢多斯
      • 因为通过 apache 这样做是更自然、低级的方式。是的,因为性能。
      猜你喜欢
      • 2011-04-01
      • 2018-06-02
      • 2018-06-01
      • 2018-05-01
      • 2019-08-26
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 2013-06-26
      相关资源
      最近更新 更多