2010-08-16 7 views
2

J'essaie de créer une règle de réécriture générale pour rediriger toutes les demandes domain.com vers www.domain.com..htaccess RewriteRule non-www à www sans explicité spécifiant le domaine

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

Le problème est que cette règle de réécriture ne correspond à rien. Comment puis-je le changer? Merci

+0

Ce n'est pas une tâche particulièrement simple en raison de la structure que les URL peuvent prendre. De toute évidence, le code que vous avez là n'acceptera que les TLD ayant un seul point tel que .com, .info, .org, etc. et ne prendra pas le .co.uk et ainsi de suite. En rendant cela plus dynamique, il est difficile de ne pas prendre d'autres sous-domaines. Votre meilleur pari est probablement d'utiliser l'alternance pour spécifier les TLDs pour supporter i.e. \ (com | co \ .uk | org), bien que cela ne soit pas complètement dynamique. –

Répondre

2

Je suppose que le problème est qu'il ya un ] supplémentaire dans vos RewriteCond « s modèle et qu'il ya un manque % lors du référencement HTTP_HOST dans RewriteRule « s substitution. Donc, essayez ceci:

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

Et pour couvrir les préoccupations Anoraks un peu litte, vous pouvez aussi essayer cette règle:

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

merci, ceci est la solution – Derk