Htaccess Générique rediriger www vers non-www
je voudrais rediriger www.example.com
vers example.com
. Le code htaccess suivant le rend possible:
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ http://example.com/ [L,R=301]
mais, y a-t-il un moyen de le faire de manière générique sans codage dur du nom de domaine?
21 réponses
mais si nous devons le faire pour http et https séparés:
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/ [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/ [R=301,L]
Rediriger non-www à www (à la fois: http + https)
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/ [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/ [R=301,L]
Si vous voulez le faire dans le httpd.fichier 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/ [R=301,NE,L]
Voici les règles pour rediriger une URL non-www vers www:
#########################
# redirect no-www to www
#########################
RewriteCond %{HTTP_HOST} ^(?!www\.)(.+) [NC]
RewriteRule ^(.*) http://www.%1/ [R=301,NE,L]
notez que j'ai utilisé le drapeau NE
pour empêcher apache d'échapper à la chaîne de requête. Sans ce drapeau, apache va changer 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/ [R]
the RewriteCond capture tout dans la variable HTTP_HOST après the" www."et l'enregistre en %1. La directive RewriteRule capture L'URL (sans leading "/") et la sauvegarde en $1.
essayez ceci:
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^(.*)$ %{HTTP_HOST} [C]
RewriteRule ^www\.(.*)$ http:// [L,R=301]
si l'hôte commence avec www, nous plaçons l'hôte entier au début de L'URL, puis nous enlevons le" www."
il peut y avoir beaucoup de fausses informations sur les redirections htaccess, je trouve. Tout d'abord, assurez-vous que votre site fonctionne sur Unix en utilisant Apache et non sur un hôte Windows si vous vous attendez à ce que ce code fonctionne.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/ [R=301,L]
(assurez-vous qu'il n'y a pas d'espaces de ligne entre chaque ligne de texte, cependant; j'ai ajouté un espace supplémentaire entre les lignes de sorte qu'il rend acceptable dans cette fenêtre.)
il s'agit d'un extrait de code qui peut être utilisé pour version www de votre site à la version http://. Il existe d'autres codes similaires qui peuvent être utilisés, aussi.
Compléter le Générique WWW gestionnaire, http/https
je n'ai pas vu de réponse complète. Je l'utilise pour gérer L'inclusion WWW.
- Generic. Ne nécessite pas d'information de domaine.
- les Forces de WWW sur domaine principal: www.domain.com
- supprime WWW sur les sous-domaines: sub.domain.com
- conserve le statut HTTP/HTTPS.
- Autorise les cookies individuels pour les domaines / sous-domaines
s'il vous Plaît laissez-moi savoir comment cela fonctionne, ou si j'ai laissé une lacune.
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/ [R=301,L]
pour sous-dossier
pour ceux qui ont besoin de 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]
Mare assurez-vous que vous l'ajouter au fichier suivant
/site/location/.htaccess
www de non www avec https
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/ [R=301,L]
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
utilisation: 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/ [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 FWD www À no www et il fonctionne très bien pour la page d'accueil, cependant sur les pages internes qu'ils transmettent à /index.php
j'ai trouvé cette autre règle dans mon .le fichier htaccess qui provoque ceci mais ne sait pas quoi faire à ce sujet. N'importe quelles suggestions seraient grandes:
############################################
## 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 voulez supprimer www
à la fois sur http
et https
, utiliser le suivant:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.
RewriteCond %{HTTPS}s ^on(s)|offs
RewriteRule ^ http%1://example.com%{REQUEST_URI} [NE,L,R]
cette redirection Non ssl
à
et SSL
à
apache 2.4.*
vous pouvez accomplir cela en utilisant un Redirect
avec if
directive
<if "%{HTTP_HOST} =='www.example.com'">
Redirect / http://example.com/
</if>
Je ne sais pas pourquoi vous voulez supprimer www. Mais la version inverse serait:
# non-www.* -> www.*, if subdomain exist, wont work
RewriteCond %{HTTP_HOST} ^whattimein\.com
RewriteRule ^(.*)$ http://www.whattimein.com/ [R=permanent,L]
Et l'avantage de ce script est: si vous avez quelque chose comme test.whattimein.com ou tout autre environnement pour le développement/les essais) il ne vous redirigera pas vers l'environnement d'origine.
la seule façon de le faire marcher...
RewriteEngine On
RewriteCond %{HTTP_HOST} ^site\.ro
RewriteRule (.*) http://www.site.ro/ [R=301,L]
si vous forcez www. dans l'url ou en forçant SSL prototcol, puis essayer d'utiliser des variations possibles dans le fichier htaccess, telles que:
RewriteEngine On RewriteBase / ### Force WWW ### RewriteCond %{HTTP_HOST} ^example\.com RewriteRule (.*) http://www.example.com/ [R=301,L] ## Force SSL ### RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://example.com/ [R,L] ## Block IP's ### Order Deny,Allow Deny from 256.251.0.139 Deny from 199.127.0.259
la réponse choisie et beaucoup d'autres solutions ici ont laissé tomber la partie de l'url après /, Donc fondamentalement il a toujours redirigé vers le domaine principal, au moins pour moi.. Donc j'ajoute l'é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]
C'est mis à jour pour fonctionner sur un serveur Apache 2.4:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/ [R=301,L]
le seul changement vs Michael's est de supprimer le [NC]
, qui produit L'erreur" AH00665":
L'option NoCase pour le motif non-regex '- f' n'est pas supportée et sera ignorée
Salut Vous pouvez utiliser les règles suivantes sur votre fichier htaccess:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/ [R=301,L]