Je voudrais rediriger www.example.com
vers example.com
. Le code htaccess suivant rend cela possible:
RewriteCond %{HTTP_Host} ^www\.example\.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
Mais, y a-t-il un moyen de faire cela de manière générique sans coder en dur le nom de domaine?
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_Host} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Identique à Michael sauf que celui-ci fonctionne: P
Mais si nous devons le faire pour http et https séparés:
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_Host} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_Host} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
Rediriger non-www vers www (les deux: http + https)
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_Host} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_Host}/$1 [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_Host} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_Host}/$1 [R=301,L]
Si vous voulez faire cela dans le fichier httpd.conf, vous pouvez le faire sans mod_rewrite (et apparemment c'est mieux pour les performances).
<VirtualHost *>
ServerName www.example.com
Redirect 301 / http://example.com/
</VirtualHost>
J'ai eu cette réponse ici: https://serverfault.com/questions/120488/redirect-url-within-Apache-virtualhost/120507#120507
Voici les règles pour rediriger une URL www vers no-www:
#########################
# redirect www to no-www
#########################
RewriteCond %{HTTP_Host} ^www\.(.+) [NC]
RewriteRule ^(.*) http://%1/$1 [R=301,NE,L]
Voici les règles pour rediriger une URL no-www vers www:
#########################
# redirect no-www to www
#########################
RewriteCond %{HTTP_Host} ^(?!www\.)(.+) [NC]
RewriteRule ^(.*) http://www.%1/$1 [R=301,NE,L]
Notez que j'ai utilisé l'indicateur NE
pour empêcher Apache d'échapper à la chaîne de requête. Sans cet indicateur, Apache changera l'URL demandée http://www.example.com/?foo%20bar
en http://www.example.com/?foo%2250bar
RewriteCond %{HTTP_Host} ^www\.(.*)$ [NC]
RewriteRule ^/(.*)$ http://%1/$1 [R]
La RewriteCond
capture tout dans la variable HTTP_Host
après le www.
et l'enregistre dans %1
.
La RewriteRule
capture l'URL sans le /
initial et l'enregistre dans $1
.
Essaye ça:
RewriteCond %{HTTP_Host} ^www\. [NC]
RewriteRule ^(.*)$ %{HTTP_Host}$1 [C]
RewriteRule ^www\.(.*)$ http://$1 [L,R=301]
Si l'hôte commence par www, nous collons tout l'hôte au début de l'URL, puis retirons le "www."
Gestionnaire WWW générique complet, http/https
Je n'ai pas vu de réponse complète. J'utilise ceci pour gérer l'inclusion WWW.
S'il vous plaît laissez-moi savoir comment cela fonctionne ou si j'ai laissé une échappatoire.
RewriteEngine On
RewriteBase /
# Force WWW. when no subdomain in Host
RewriteCond %{HTTP_Host} ^[^.]+\.[^.]+$ [NC]
RewriteCond %{HTTPS}s ^on(s)|off [NC]
RewriteRule ^ http%1://www.%{HTTP_Host}%{REQUEST_URI} [R=301,L]
# Remove WWW. when subdomain(s) in Host
RewriteCond %{HTTP_Host} ^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|off [NC]
RewriteCond http%1://%{HTTP_Host} ^(https?://)(www\.)(.+\.)(.+\.)(.+)$ [NC]
RewriteRule ^ %1%3%4%5%{REQUEST_URI} [R=301,L]
Je trouve qu'il peut y avoir beaucoup de désinformation sur les redirections htaccess. Tout d'abord, assurez-vous que votre site fonctionne sous Unix sous Apache et non sur un hôte Windows si vous prévoyez que ce code fonctionnera.
RewriteEngine On
RewriteCond %{HTTP_Host} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
(Assurez-vous cependant qu'il n'y a pas d'espaces entre chaque ligne de texte; j'ai ajouté un espace supplémentaire entre les lignes afin que le rendu soit correct dans cette fenêtre.)
Ceci est un extrait de code qui peut être utilisé pour diriger la version www de votre site vers la version http: //. D'autres codes similaires peuvent également être utilisés.
Pour ceux qui doivent pouvoir accéder à l’ensemble du site SANS le préfixe 'www'.
RewriteCond %{HTTP_Host} ^www\.(.+)$ [NC]
RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301]
Je suis sûr que vous ajoutez ceci au fichier suivant
/site/location/.htaccess
RewriteCond %{HTTP_Host} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/subfolder/$1 [R=301,L]
Pour le sous-dossier
www à non www avec https
RewriteEngine on
RewriteCond %{HTTP_Host} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
Utilisation de .htaccess pour rediriger vers www ou non-www:
Il vous suffit de placer les lignes de code suivantes dans votre fichier principal .htaccess. Dans les deux cas, remplacez domain.com par votre propre nom d'hôte.
Rediriger vers www
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_Host} ^domain\.com [NC]
RewriteRule ^(.*)$ http://wwwDOTdomainDOtcom/$1 [L,R=301]
</IfModule>
Rediriger vers un non-www
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_Host} ^www\.domain\.com [NC]
RewriteRule ^(.*)$ http://domainDOTcom/$1 [L,R=301]
</IfModule>
changez DOT en =>. !!!
RewriteEngine on
# if Host value starts with "www."
RewriteCond %{HTTP_Host} ^www\.
# redirect the request to "non-www"
RewriteRule ^ http://example.com%{REQUEST_URI} [NE,L,R]
Si vous souhaitez supprimer www
sur http
et https
, utilisez les éléments suivants:
RewriteEngine on
RewriteCond %{HTTP_Host} ^www\.
RewriteCond %{HTTPS}s ^on(s)|offs
RewriteRule ^ http%1://example.com%{REQUEST_URI} [NE,L,R]
Cela redirige Non ssl
à
Et SSL
à
sur Apache 2.4.*
vous pouvez le faire en utilisant une directive Redirect
avec if
,
<if "%{HTTP_Host} =='www.example.com'">
Redirect / http://example.com/
</if>
utiliser: Javascript/jQuery
// similar behavior as an HTTP redirect
window.location.replace("http://www.stackoverflow.com");
// similar behavior as clicking on a link
window.location.href = "http://stackoverflow.com";
Or .htaccess:
RewriteEngine On
RewriteBase /
Rewritecond %{HTTP_Host} ^www\.yoursite\.com$ [NC]
RewriteRule ^(.*)$ https://yoursite.com/$1 [R=301,L]
et la méthode PHP:
$protocol = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";
if (substr($_SERVER['HTTP_Host'], 0, 4) !== 'www.') {
header('Location: '.$protocol.'www.'.$_SERVER ['HTTP_Host'].'/'.$_SERVER['REQUEST_URI']);
exit;
}
Ajax
$.ajax({
type: "POST",
url: reqUrl,
data: reqBody,
dataType: "json",
success: function(data, textStatus) {
if (data.redirect) {
// data.redirect contains the string URL to redirect to
window.location.href = data.redirect;
}
else {
// data.form contains the HTML for the replacement form
$("#myform").replaceWith(data.form);
}
}
});
J'ai utilisé la règle ci-dessus pour modifier www à no www et cela fonctionne bien pour la page d'accueil, mais sur les pages internes, ils sont transférés vers /index.php
J'ai trouvé cette autre règle dans mon fichier .htaccess qui cause ceci, mais je ne sais pas quoi faire à ce sujet. Toute suggestion sera appréciée:
############################################
## always send 404 on missing files in these folders
RewriteCond %{REQUEST_URI} !^/(media|skin|js)/
############################################
## never rewrite for existing files, directories and links
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
############################################
## rewrite everything else to index.php
RewriteRule .* index.php [L]
La réponse sélectionnée et de nombreuses autres solutions ici ont laissé tomber la partie de l'URL après /, donc fondamentalement, elle est toujours redirigée vers le domaine principal, du moins pour moi.
RewriteEngine On
RewriteCond %{HTTP_Host} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [L,R=301]
La seule façon dont je l'ai fait fonctionner ...
RewriteEngine On
RewriteCond %{HTTP_Host} ^site\.ro
RewriteRule (.*) http://www.site.ro/$1 [R=301,L]
Si vous forcez www. en url ou en forçant ssl prototcol, puis essayez d’utiliser les variantes possibles du fichier htaccess, telles que:
RewriteEngine On RewriteBase /[.____._rev ### Force WWW ### RewriteCond% {HTTP_Host} ^ exemple\.com RewriteRule (. *) http://www.example.com/$1 [R = 301, L] ## Forcer SSL ### RewriteCond% {SERVER_PORT} 80 RewriteRule ^ (. *) $ Https://example.com/$1 [R, L] #. # Bloquer les IP ### Ordre Refuser, Autoriser Refuser à partir de 256.251.0.139 Refuser à partir de 199.127.0.259
Ceci est mis à jour pour fonctionner sur Apache 2.4:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_Host} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Le seul changement vs Michael's consiste à supprimer le [NC]
, qui génère l'erreur "AH00665":
L'option NoCase pour le modèle non-regex '-f' n'est pas prise en charge et sera ignorée
Je ne sais pas pourquoi tu veux enlever www. Mais la version inversée serait:
# non-www.* -> www.*, if subdomain exist, wont work
RewriteCond %{HTTP_Host} ^whattimein\.com
RewriteRule ^(.*)$ http://www.whattimein.com/$1 [R=permanent,L]
Et l’avantage de ce script est le suivant: si vous avez quelque chose comme test.whattimein.com ou tout autre environnement (environnement de développement/test), il ne sera pas redirigé vers l’environnement d’origine.