1

J'ai une configuration Rails + Apache + Passenger et mon application sert des sous-domaines génériques. J'ai besoin que toutes les URL www redirigent vers leurs équivalents non www.Rediriger www vers non www sur un serveur avec des sous-domaines génériques

  • www.example.net devrait rediriger vers example.net
  • www.subdomain.example.net devrait rediriger vers subdomain.example.net

Ma config actuelle vhost est comme ci-dessous

<VirtualHost *:80> 

    ServerName example.net 
    ServerAlias *.example.net 

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

    RailsEnv staging 

</VirtualHost> 

J'ai essayé un assortiment de règles de réécriture à divers endroits mais aucun n'a pris effet. J'ai vérifié que le module de réécriture apache est activé et que RewriteEngine est activé. Je ne sais pas ce que je manque. Toute aide très appréciée!

Répondre

1

Je résolu cette question dans mon application, comme je l'ai logique basée sur le domaine de toute façon. Placez ce code dans votre 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 

pourrait avoir des cas particuliers si certains de vos noms d'hôte contiennent « www. » pour toute autre raison que vous auriez à coder.

+2

Je voudrais éviter cela au niveau du code simplement parce qu'il devrait idéalement se produire avant que le code ne soit touché. – Vinay

0

Vous pouvez utiliser moderewrite dans votre fichier .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] 

Cela devrait fonctionner mais je ne l'ai pas testé.
ou cette

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

J'ai essayé de mettre ces conditions dans un fichier .htaccess sous le dossier public de mon application rails mais ça marche. En outre, je suis en train de servir des sous-domaines génériques, alors comment la condition et la règle de réécriture devraient-elles chercher cela? – Vinay

+0

@jcubic y a-t-il un moyen d'inverser la tendance? Je veux toujours avoir le www. pour tout domaine qui atteint le site. –

+0

Il y a aussi une chose, sur mon hôte pour chaque domaine, j'ai un enregistrement DNS "A" pour ce domaine avec www la même chose avec des sous-domaines. – jcubic

Questions connexes