Перенаправление www на не www на сервере с поддоменами подстановочных знаков - PullRequest
1 голос
/ 09 сентября 2010

У меня есть 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 включен. Не уверен, что мне не хватает. Вся помощь очень ценится!

Ответы [ 2 ]

1 голос
/ 10 сентября 2010

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

0 голосов
/ 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]
...