Перенаправление с www на не www на сервере с поддоменами с подстановочными знаками

У меня есть настройка Rails+Apache+Passenger, и мое приложение обслуживает субдомены с подстановочными знаками. Мне нужно, чтобы все URL-адреса с www перенаправляли на их эквиваленты без 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. Не уверен, что мне не хватает. Вся помощь очень ценится!


person Vinay    schedule 09.09.2010    source источник


Ответы (2)


Я решил эту проблему в своем приложении, так как у меня все равно есть логика, основанная на домене. Поместите этот код в свой 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». по любой другой причине, по которой вам придется кодировать.

person Joshua    schedule 10.09.2010
comment
Я бы не хотел делать это на уровне кода просто потому, что в идеале это должно произойти до того, как код будет запущен. - person Vinay; 10.09.2010

Вы можете использовать moderewrite в вашем файле .htaccess.

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]
person jcubic    schedule 09.09.2010
comment
Я попытался поместить эти условия в файл .htaccess в общую папку моего приложения rails, но это не сработало. Кроме того, я обслуживаю поддомены с подстановочными знаками, так как же должны искать это условие перезаписи и правило? - person Vinay; 10.09.2010
comment
@jcubic есть ли способ сделать это наоборот. Я всегда хочу иметь www. для любого домена, который попадает на сайт. - person Gabriel Spiteri; 02.03.2012
comment
Есть еще одна вещь, на моем хосте для каждого домена у меня есть DNS-запись для этого домена с www, то же самое с поддоменами. - person jcubic; 02.03.2012