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?

Était-ce utile?

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.

  1. Générique. Ne nécessite pas d'informations de domaine.
  2. Force WWW sur le domaine principal: www.domain.com
  3. Supprime le WWW sur les sous-domaines: sub.domain.com
  4. Conserve le statut HTTP / HTTPS.
  5. 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]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top