Htaccess générique rediriger www en non-www
-
04-07-2019 - |
Question
Je voudrais rediriger www.example.com
vers exemple.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 le faire de manière générique sans coder en dur le nom de domaine?
La solution
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Identique à Michael's sauf que celui-ci fonctionne: P
Autres conseils
Mais si nous avons besoin de faire cela pour séparer http et https:
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 la performance).
<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-inside-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 sans 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 modifiera 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]
Le 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
.
Essayez ceci:
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.".
Je trouve que la désinformation sur les redirections htaccess peut être très fausse. Tout d'abord, assurez-vous que votre site fonctionne sous Unix sous Apache et non sur un hôte Windows si vous pensez que ce code fonctionnera.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
(Assurez-vous qu'il n'y a pas d'espaces entre les lignes de texte, j'ai ajouté un espace supplémentaire entre les lignes pour 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.
Complétez le gestionnaire générique WWW, http / https
Je n'ai pas vu de réponse complète. J'utilise ceci pour gérer l'inclusion WWW.
- Générique. Ne nécessite pas d'informations de domaine.
- Force WWW sur le domaine principal: www.domain.com
- Supprime le WWW sur les sous-domaines: sub.domain.com
- Conserve le statut HTTP / HTTPS.
- Autorise les cookies individuels pour le domaine / sous-domaines
Faites-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]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/subfolder/$1 [R=301,L]
Pour le sous-dossier
Pour ceux qui doivent pouvoir accéder à l'intégralité du site SANS le préfixe "www".
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301]
Assurez-vous d’ajouter cela au fichier suivant
/site/location/.htaccess
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]
J'ai utilisé la règle ci-dessus pour modifier www sur 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 est la cause, mais je ne sais pas quoi faire à ce sujet. Toutes les suggestions seraient géniales:
############################################
## 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]
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]
Ceci redirige Non ssl
à
Et SSL
à
sur Apache 2.4. *
vous pouvez y parvenir en utilisant une redirection
avec la directive si
,
<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";
Ou .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 = (@ 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";
Ou .htaccess:
RewriteEngine On
RewriteBase /
Rewritecond %{HTTP_HOST} ^www\.yoursite\.com$ [NC]
RewriteRule ^(.*)$ https://yoursite.com/$1 [R=301,L]
et la méthode PHP:
$.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);
}
}
});
Ajax
<*>SERVER["HTTPS"] == "on") ? "https://" : "http://";
if (substr( 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";
Ou .htaccess:
RewriteEngine On
RewriteBase /
Rewritecond %{HTTP_HOST} ^www\.yoursite\.com$ [NC]
RewriteRule ^(.*)$ https://yoursite.com/$1 [R=301,L]
et la méthode PHP:
<*>
Ajax
<*>SERVER['HTTP_HOST'], 0, 4) !== 'www.') {
header('Location: '.$protocol.'www.'. 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";
Ou .htaccess:
RewriteEngine On
RewriteBase /
Rewritecond %{HTTP_HOST} ^www\.yoursite\.com$ [NC]
RewriteRule ^(.*)$ https://yoursite.com/$1 [R=301,L]
et la méthode PHP:
<*>
Ajax
<*>SERVER ['HTTP_HOST'].'/'. 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";
Ou .htaccess:
RewriteEngine On
RewriteBase /
Rewritecond %{HTTP_HOST} ^www\.yoursite\.com$ [NC]
RewriteRule ^(.*)$ https://yoursite.com/$1 [R=301,L]
et la méthode PHP:
<*>
Ajax
<*>SERVER['REQUEST_URI']);
exit;
}
Ajax
<*>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>
Redirection vers un site 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 = > . !!!
La seule façon pour moi de le faire 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 le protocole SSL, puis essayez d’utiliser les variantes possibles du fichier htaccess, telles que:
RewriteEngine On RewriteBase / ### Force WWW ### RewriteCond %{HTTP_HOST} ^example\.com RewriteRule (.*) http://www.example.com/$1 [R=301,L] ## Force SSL ### RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://example.com/$1 [R,L] ## Block IP's ### Order Deny,Allow Deny from 256.251.0.139 Deny from 199.127.0.259
La réponse sélectionnée et de nombreuses autres solutions ici ont abandonné la partie de l'URL après /, donc, fondamentalement, elle est toujours redirigée vers le domaine principal, du moins pour moi .. Je rajoute donc un échantillon de travail en respectant le chemin complet après le slash ..
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [L,R=301]
Je ne sais pas trop pourquoi vous voulez supprimer 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: si vous avez quelque chose comme test.whattimein.com ou un autre (environnement de développement / test) il ne redirigera pas U vers l'environnement d'origine.
Ceci a été mis à jour pour fonctionner sur Apache 2.4:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
La seule modification apportée à Michael's consiste à supprimer le [NC]
, qui produit le "AH00665" erreur:
L'option NoCase pour le modèle non-regex '-f' n'est pas prise en charge et sera ignorée
Bonjour, vous pouvez appliquer les règles suivantes à votre fichier htaccess:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]