使用通配符子域将www重定向到服务器上的非www

时间:2010-09-09 10:26:18

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

我有一个Rails + Apache + Passenger设置,我的应用程序提供了通配符子域。我需要所有www URL重定向到他们的非www等价物。

  • www.example.net应重定向到example.net
  • www.subdomain.example.net应重定向到subdomain.example.net

我当前的vhost配置如下

<VirtualHost *:80>

  ServerName  example.net
  ServerAlias *.example.net

  DocumentRoot /home/public_html/example.net/current/public

  RailsEnv staging

</VirtualHost>

我在各个地方尝试了各种各样的重写规则,但都没有生效。我已经检查过以确保启用了apache重写模块并启用了RewriteEngine。不知道我错过了什么。所有人都非常感谢!

2 个答案:

答案 0 :(得分:1)

我在我的应用中解决了这个问题,因为无论如何我都有基于域的逻辑。将此代码放在ApplicationController

class ApplicationController < ActionController::Base
    before_filter :check_host

    def check_host
        if request.host.split('.')[0] == 'www'
            redirect_to "http://" + request.host.gsub('www.','')
        end
    end
end

如果您的某些主机名包含“www”,可能会出现特殊情况。由于您必须编码的任何其他原因。

答案 1 :(得分:0)

您可以在.htaccess文件中使用moderewrite。

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

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

这应该有效,但我没有测试。
或者这个

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