Rediriger non-www vers www in.htaccess

, j'ai ceci dans mon .fichier htaccess:

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

mais chaque fois que j'accède à un fichier sur ma racine comme http://example.com/robots.txt il redirigera vers http://www.example.comrobots.txt/ .

Comment puis-je corriger cela pour qu'il soit redirigé correctement vers http://www.example.com/robots.txt ?

150
demandé sur Cristy 2012-08-21 12:04:38

13 réponses

changez votre configuration en ceci (ajoutez une barre oblique):

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

ou la solution décrite ci-dessous (proposée par @absiddiqueLive ) fonctionnera pour n'importe quel domaine:

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

si vous devez prendre en charge http et https et préserver le choix du protocole, essayez ce qui suit:

RewriteRule ^login$ https://www.%{HTTP_HOST}/login [R=301,L]

où vous remplacez login par checkout.php ou N'importe quelle URL dont vous avez besoin pour prendre en charge HTTPS.

je dirais c'est une mauvaise idée. Pour le raisonnement veuillez lire cette réponse .

313
répondu ranman 2017-11-19 03:55:12
RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\.

RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/ [R=301,L]

Https

RewriteCond %{HTTPS}s ^on(s)|

RewriteRule ^(.*)$ http%1://www.%{HTTP_HOST}/ [R=301,L]
73
répondu absiddiqueLive 2015-11-24 07:29:30

Voici la bonne solution qui supporte https et http:

# Redirect to www
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
65
répondu Alexey Kosov 2014-11-28 08:21:08

l'exemple suivant fonctionne à la fois sur ssl et non-ssl et est beaucoup plus rapide que vous utilisez une seule règle pour gérer http et https

RewriteEngine on


RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTPS}s on(s)|offs()
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R]

[testé]

Ce sera rediriger

http

à

https

à

19
répondu starkeen 2016-04-23 07:48:02

essayez ceci, je l'ai utilisé dans de nombreux sites web, il fonctionne parfaitement

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^bewebdeveloper.com$
RewriteRule ^(.*) http://www.bewebdeveloper.com/  [QSA,L,R=301]
6
répondu Ali Aboussebaba 2014-10-22 08:34:02

cette configuration a fonctionné pour moi dans bitnami wordpress avec SSL configuré:

a ajouté ce qui suit sous" RewriteEngine On " dans le fichier /opt/bitnami/apps/wordpress/conf/httpd-app.conf

RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
3
répondu Abhilash Mishra 2018-02-14 08:39:09
RewriteCond %{HTTP_HOST} !^www\.domain\.com [NC]
RewriteRule (.*) http://www.domain.com/ [L,R=301]

cela redirigera votre domaine qui n'est pas démarré avec WWW Il n'est pas rediriger votre sous-domaine.

C'est utile.

2
répondu Ashish Gondaliya 2015-01-19 19:35:51

je crois que la meilleure réponse redirige avec succès non-www à www (ex: mysite.com -> www.mysite.com ), mais ne tient pas compte des sous-domaines de caractère générique, ce qui donne:

random.mysite.com -> www.random.mysite.com

Voici une solution avec / sans HTTPS

HTTP

RewriteEngine On

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

HTTP / HTTPS

RewriteEngine On

RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [env=protocol:https]

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [env=protocol:http]

RewriteCond %{HTTP_HOST} !www.mysite.com$ [NC]
RewriteRule ^(.*)$ %{ENV:protocol}://www.mysite.com/ [L,R=301]

* note: je n'ai pas testé https parce que je n'ai pas actuellement de cert à tester, mais si quelqu'un peut vérifier ou optimiser ce que j'ai ce serait génial.

2
répondu Hunter Frazier 2015-02-10 09:03:20

ajouter le code suivant dans .fichier htaccess.

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

URLs redirect tutorial peut être trouvé d'ici - Redirect non-www to www & HTTP to HTTPS using .fichier htaccess

2
répondu JoyGuru 2015-10-28 11:16:13

j'ai testé toutes les solutions ci-dessus mais ne travaillant pas pour moi, j'ai essayé de supprimer le http: / / et ne redirigera pas aussi supprimé le www il redirigera bien, donc je me confonds, spécialement je suis en cours d'exécution de tous mes sites sous https: / /

donc j'ai combiné quelques codes et j'ai trouvé la solution parfaite pour http:// et https:// et www et non-www.

# HTTPS forced
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
# Redirect to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/ [R=301,L]
</IfModule>

j'Espère que cela peut aider quelqu'un :)

2
répondu Al3abMizo Games 2017-05-11 12:57:55

si possible, ajoutez ceci au fichier de configuration principal D'Apache. Il s'agit d'une solution plus légère, nécessitant moins de traitement.

<VirtualHost 64.65.66.67>
        ServerName example.com
        Redirect permanent / http://www.example.com/
</VirtualHost>
<VirtualHost 64.65.66.67>
   ServerAdmin me@example.com
   ServerName www.example.com
   DocumentRoot /var/www/example
   .
   .
   . etc

donc, le VirtualHost séparé pour "example.com" capture ces requêtes et les redirige en permanence vers votre main VirtualHost . Donc, il n'y a pas de parsing REGEX avec chaque requête, et vos navigateurs clients vont mettre en cache la redirection de sorte qu'ils ne demanderont jamais (ou rarement) la "mauvaise" url à nouveau, vous économisant sur la charge du serveur.

Note, la barre oblique dans Redirect permanent / http://www.example.com/ . Sans elle, une redirection de example.com/asdf serait redirigée vers http://www.example.comasdf au lieu de http://www.example.com/asdf .

0
répondu Buttle Butkus 2017-03-21 04:56:07

deux avertissements

éviter les codes 301 et préférer les codes 303 ou 307 modernes.

Éviter 301

réfléchissez bien si vous avez vraiment besoin de la redirection permanente indiquée comme [R=301] parce que si vous décidez de la changer plus tard, alors les visiteurs précédents de la page continueront à voir la page de la redirection originale.

les informations de redirection permanente sont fréquemment stockées dans le cache du navigateur et, en général, il est difficile d'éliminer (recharger la page ne résolvent pas le problème). Les visiteurs de votre site Web seront bloqués dans la redirection précédente "pour toujours".

Evite 302 too

la nouvelle version du protocole HTTP (v1.1) Ajout de deux nouveaux codes d'état de réponse qui peuvent être utilisés au lieu de 302.

  • 303 redirection D'URL mais exigeant de changer le type de requête en OBTENIR.
  • 307 Redirection D'URL mais exigeant de conserver le type de requête tel qu'initialement envoyé.

vous pouvez toujours utiliser le code 302 (redirection non permanente) bien qu'il soit considéré comme ambigu. Dans tous les cas, la plupart des navigateurs implémentent 302 de la même manière que le nouveau code 303 l'indique.

0
répondu ePi272314 2018-07-13 18:47:00

écrivez .htaccess:)

## Redirect from non-www to www (remove the two lines below to enable)
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/ [R=301,L]
-1
répondu Piseth Sok 2014-07-03 01:55:37