2010-08-25 5 views
1

Nous avons un nom de domaine avec différents TLD. Utilisons example.com comme URL principale, et nous redirigeons example.biz, example.net, example.org vers example.com.htaccess rewritecond

Nous avons eu les éléments suivants dans le fichier .htaccess et cela a fonctionné très bien:

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

Vous remarquez que tout non-www sera redirigé vers www.

Cependant, nous avons simplement ajouté un sous-domaine: str.example.com, et pour le rendre accessible, nous avons dû commenter les règles ci-dessus.

J'espère que quelqu'un peut nous aider à écrire les règles qui redirigent:

  1. non www et non www str
  2. non-.com TLDs .COM

plusieurs cas de faire mes moyens clairs:

  1. example.com -> www.example.com
  2. example.net -> www.example.com
  3. abc.example.com -> www.example.com
  4. str.example.com -> str.example.com
  5. str.example.org - > str.example.com

Merci beaucoup.

Répondre

3

C'est un peu plus compliqué, mais il vous permet d'économiser un potentiel redirect supplémentaire:

RewriteEngine On 

RewriteCond %{HTTP_HOST} !^(www|str)\.  [NC,OR] 
RewriteCond %{HTTP_HOST} !\.com$    [NC] 
RewriteCond %{HTTP_HOST} (.*?)\.[A-Z]+$  [NC] 
RewriteCond %1   ^(([^.]+)\.)?example$ 
RewriteCond %2   ^(str)    [OR] 
RewriteCond www   ^(www) 
RewriteRule^http://%1.example.com%{REQUEST_URI} [R=301,L] 

Notez qu'il aussi que vous attend d'avoir un seul TLD , donc example.co.uk ne fonctionnerait pas ici par exemple. Ce n'était pas un de vos exemples, donc je n'ai pas essayé d'en rendre compte.

+0

Quels sont les% 1 et% 2 dans les quatrième et cinquième Cond? Les valeurs entre parenthèses des règles précédentes? –

+0

@Litso - Oui, ils sont référencés par rapport au précédent modèle de test 'RewriteCond'. Donc '% 1' est la capture' (. *?) ', Et'% 2' est la capture '([^.] +)' Des deux précédentes instructions 'RewriteCond'. –

+0

ah, à partir des motifs positivement assortis, cela explique la partie que je n'ai pas saisie. appris encore une autre chose :) –

1

Essayez ces règles:

RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.[^/.]+$ 
RewriteCond %1 !^(www|str)$ 
RewriteRule^http://www.example.com%{REQUEST_URI} [L,R=301] 
RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.([^/.]+)$ 
RewriteCond %2 !=com 
RewriteRule^http://%1.example.com%{REQUEST_URI} [L,R=301]