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
?
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 .
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]
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]
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
à
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]
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]
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.
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.
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
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 :)
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
.
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.
é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]