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?

455
demandé sur deepwell 2008-10-24 22:19:38

21 réponses

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

même que Michael's sauf que celui-ci fonctionne: p

809
répondu Community 2017-05-23 11:55:07

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]
100
répondu Andron 2016-12-06 09:26:14

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]
69
répondu Dmitriy 2011-03-10 15:42:10

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

44
répondu William Denniss 2017-04-13 12:13:44

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

32
répondu Salman A 2012-04-28 10:27:23
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.

11
répondu Michael Cramer 2008-10-26 16:03:20

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."

7
répondu Greg 2008-10-24 18:26:48

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.

6
répondu Htaccess Redirect 2011-06-08 09:57:16

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.

  1. Generic. Ne nécessite pas d'information de domaine.
  2. les Forces de WWW sur domaine principal: www.domain.com
  3. supprime WWW sur les sous-domaines: sub.domain.com
  4. conserve le statut HTTP/HTTPS.
  5. 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]
5
répondu Gregor Macgregor 2016-02-09 20:36:04
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/subfolder/ [R=301,L]

pour sous-dossier

3
répondu pelajar 2011-10-19 14:36:17

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 
3
répondu Rick 2014-09-04 18:23:19

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]
3
répondu Rajith Ramachandran 2015-03-03 11:50:52

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);
        }
    }
});
3
répondu antimalwareprogram 2017-08-03 08:44:11

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]
2
répondu Luke 2015-02-04 10:08:06
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>
2
répondu starkeen 2016-07-10 08:17:59

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.

1
répondu local 2011-12-16 18:07:11

la seule façon de le faire marcher...

RewriteEngine On
RewriteCond %{HTTP_HOST} ^site\.ro
RewriteRule (.*) http://www.site.ro/ [R=301,L]
1
répondu sulfy 2012-11-28 12:32:43

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
1
répondu mystique 2014-11-18 04:18:02

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]
1
répondu luky 2017-01-15 15:17:03

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

0
répondu William Entriken 2017-05-23 12:26:31

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]
-1
répondu Chirag Parekh 2015-05-05 12:29:10