J'ai un site Web qui ne semble pas rediriger de non-www vers www.
Ma configuration Apache est la suivante:
RewriteEngine On
### re-direct to www
RewriteCond %{http_host} !^www.example.com [nc]
RewriteRule ^(.*)$ http://www.example.com/$1 [r=301,nc]
Qu'est-ce que je rate?
apache
redirect
mod-rewrite
no-www
user121196
la source
la source
.htaccess
solution basée, je suggère une réponse qui a été posée sur la question diamétrale: stackoverflow.com/a/5262044/367456Réponses:
L'utilisation du moteur de réécriture est un moyen assez lourd pour résoudre ce problème. Voici une solution plus simple:
Et puis vous aurez une autre
<VirtualHost>
section avecServerName www.example.com
pour votre configuration de serveur réelle. Apache conserve automatiquement quoi que ce soit après l'/
utilisation de laRedirect
directive , ce qui est une idée fausse commune sur les raisons pour lesquelles cette méthode ne fonctionnera pas (alors qu'en fait elle le fait).la source
www.example
etexample
partout où ils apparaissent dans l'échantillon.Redirect 301 / http://example2.com/extra/
mais lorsqu'il redirige, il manque la barre oblique de fin, ce qui signifie que celaexample.com/blah
vaexample2.com/extrablah
. Des idées? (Apache 2.2.22)http://example.com/subdir/?lold=13666
=>http://www.example.com/subdir/?lold=13666
la source
example.com/subdi1/ws/*
passer sans www?s
à http dans la troisième ligne.la source
www.
dans leServerAlias
?Pour supprimer
www
de votreURL
site Web, utilisez ce code dans votre.htaccess
fichier:Pour forcer
www
dans votre site Web àURL
utiliser ce code sur.htaccess
Où
YourSite.com
doit être remplacé par votreURL
.la source
C'est ce qui se passe avec le code ci-dessus. Le premier bloc d'hôte virtuel vérifie si la demande est www.example.com et exécute votre site Web dans ce répertoire.
A défaut, il s'agit de la deuxième section d'hôte virtuel. Ici, tout autre élément que www.example.com est redirigé vers www.example.com.
L'ordre ici est important. Si vous ajoutez d'abord la deuxième directive virtualhost, cela provoquera une boucle de redirection.
Cette solution redirige toute demande vers votre domaine vers www.votredomaine.com.
À votre santé!
la source
Ceci est similaire à la plupart des autres suggestions avec quelques améliorations:
%{REQUEST_URI}
règles .La portion de chemin non affectée par les
RewriteRule
s précédents%{REQUEST_URI}
est.la source
Cela commence par la
HTTP_HOST
variable, qui contient uniquement la partie du nom de domaine de l'URL entrante (example.com
). En supposant que le nom de domaine ne contient pas dewww.
et correspond exactement à votre nom de domaine, alors la RewriteRule entre en jeu. Le modèle^(.*)$
correspondra à tout dans leREQUEST_URI
, qui est la ressource demandée dans la requête HTTP (foo/blah/index.html
). Il le stocke dans une référence arrière, qui est ensuite utilisée pour réécrire l'URL avec le nouveau nom de domaine (celui qui commence parwww
).[NC]
indique une correspondance de modèle insensible à la casse,[R=301]
indique une redirection externe à l'aide du code 301 (ressource déplacée de façon permanente),[L]
arrête toute réécriture et redirige immédiatement.la source
Code de redirection pour non-www => www et opposé www => non-www. Pas de domaines et de schémas de codage en dur dans le fichier .htaccess. Le domaine d'origine et la version http / https seront donc préservés.
APACHE 2.4 ET PLUS RÉCENT
NON-WWW => WWW:
WWW => NON-WWW:
Remarque: ne fonctionne pas sur Apache 2.2 où% {REQUEST_SCHEME} n'est pas disponible. Pour la compatibilité avec Apache 2.2, utilisez le code ci-dessous ou remplacez% {REQUEST_SCHEME} par http / https fixe.
APACHE 2.2 ET PLUS RÉCENT
NON-WWW => WWW:
... ou version plus courte ...
WWW => NON-WWW:
... une version plus courte n'est pas possible car% N est disponible uniquement depuis le dernier RewriteCond ...
la source
J'ai couru ça ...
J'ai besoin que cela soit universel pour plus de 25 domaines sur notre nouveau serveur, donc cette directive est dans mon fichier virtual.conf dans une balise <Directory>. (dir est le parent de tous les docroots)
J'ai dû faire un peu de piratage sur la règle de réécriture, car la docroot complète était en cours d'exécution sur la correspondance de modèle, malgré ce que http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html dit à propos qu'il ne s'agit que de trucs après l'hôte et le port.
la source
Si vous utilisez Apache 2.4, sans avoir besoin d'activer le module de réécriture d'apache, vous pouvez utiliser quelque chose comme ceci:
la source
Redirigez domain.tld vers www.
Les lignes suivantes peuvent être ajoutées dans les directives Apache ou dans le fichier .htaccess:
N'oubliez pas d'appliquer les changements d'apache si vous modifiez le vhost.
(basé sur le Drupal7 .htaccess par défaut mais devrait fonctionner dans de nombreux cas)
la source
C'est simple!
la source
Cela redirigera non seulement le nom de domaine mais aussi les pages internes.like ...
example.com/abcd.html ==> www.example.com/abcd.html
example.com/ab/cd.html?ef=gh ==> www.example.com/ab/cd.html?ef=gh
la source
Essaye ça:
la source
N'utilisez pas toujours
Redirect permanent
(ou pourquoi cela pourrait causer des problèmes à l'avenir)S'il est possible que vous ajoutiez des sous-domaines ultérieurement, n'utilisez pas
redirect permanent
.Parce que si un client a utilisé un sous-domaine qui n'était pas enregistré en tant que
VirtualHost
il peut également ne jamais atteindre ce sous-domaine même s'il est enregistré plus tard.redirect permanent
envoie unHTTP 301 Moved Permanently
au client (navigateur) et beaucoup d'entre eux mettent en cache cette réponse pour toujours (jusqu'à ce que le cache soit vidé [manuellement]). Ainsi, l'utilisation de ce sous-domaine sera toujours redirigée automatiquement vers www. *** sans demander à nouveau le serveur.voir Combien de temps les navigateurs mettent-ils en cache HTTP 301?
Il suffit donc d'utiliser
Redirect
Apache.org - Quand ne pas utiliser mod_rewrite
Apache.org - Noms d'hôte canoniques
la source
RewriteEngine On RewriteCond %{HTTP_HOST} ^yourdomain.com [NC] RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [L,R=301]
vérifier ce travail parfait
la source
-Si vous hébergez plusieurs noms de domaine (facultatif)
-Si tous ces noms de domaine utilisent https (comme ils le devraient)
-si vous voulez que tous ces noms de domaine utilisent www dot domainName
Cela évitera une redirection double (http: // non www vers http: // www puis vers https: // www)
Et
Vous devez changer le code de redirection 301 pour le plus pratique
la source
J'ai juste un même problème. Mais résolu avec ça
RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Cette règle redirige les non-www vers www.
Et cette règle pour rediriger www vers non-www
RewriteEngine On RewriteCond %{HTTP_HOST} !^my-domain\.com$ [NC] RewriteRule ^(.*)$ http://my-domain.com/$1 [R=301,L]
Reportez-vous à http://dense13.com/blog/2008/02/27/redirecting-non-www-to-www-with-htaccess/
la source
Cela fonctionne pour moi:
J'utilise le modèle
(?!www.domain.com)
d'anticipation pour exclure lewww
sous - domaine lors de la redirection de tous les domaines vers lewww
sous - domaine afin d'éviter une boucle de redirection infinie dans Apache.la source
Le code que j'utilise est:
la source
Si vous utilisez la solution ci-dessus de deux
<VirtualHost *:80>
blocs avec desServerName
s différents ...... alors vous devez définir
NameVirtualHost On
ainsi .Si vous ne le faites pas, Apache ne se permet pas d'utiliser les différents
ServerName
s pour distinguer les blocs, vous obtenez donc ce message d'erreur:... et soit aucune redirection ne se produit, soit vous avez une boucle de redirection infinie, selon le bloc que vous placez en premier.
la source
J'ai eu une tâche similaire sur un WP Multisite, où la règle de redirection devait être générique (pour tout domaine donné que j'ajouterais au réseau). J'ai résolu tout d'abord l'ajout d'un caractère générique au domaine (domaine parqué). Noter la . après .com.
Et puis j'ai ajouté les lignes suivantes au fichier .htaccess à la racine de mon multisite. Je suppose que cela fonctionnerait pour n'importe quel site.
J'espère que cela vous aidera.
ps. Si vous souhaitez rediriger de non www vers www, changez la dernière ligne en
la source
J'ai trouvé plus facile (et plus utile) d'utiliser ServerAlias lors de l'utilisation de plusieurs vhosts.
Cela fonctionne également avec les vhosts https.
la source