Htaccess generico reindirizza www a non www

Vorrei redirect www.example.com su example.com . Il seguente codice htaccess rende questo ansible:

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

Ma c’è un modo per farlo in modo generico senza codificare il nome del dominio?

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

Come quello di Michael, eccetto questo: P

Ma se dobbiamo fare questo per http e https separati:

 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] 

Reindirizzare non www a www (entrambi: 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] 

Se vuoi farlo nel file httpd.conf, puoi farlo senza mod_rewrite (e apparentemente è meglio per le prestazioni).

  ServerName www.example.com Redirect 301 / http://example.com/  

Ho avuto questa risposta qui: https://serverfault.com/questions/120488/redirect-url-within-apache-virtualhost/120507#120507

Ecco le regole per redirect un URL www a no-www:

 ######################### # redirect www to no-www ######################### RewriteCond %{HTTP_HOST} ^www\.(.+) [NC] RewriteRule ^(.*) http://%1/$1 [R=301,NE,L] 

Ecco le regole per redirect un URL no-www a www:

 ######################### # redirect no-www to www ######################### RewriteCond %{HTTP_HOST} ^(?!www\.)(.+) [NC] RewriteRule ^(.*) http://www.%1/$1 [R=301,NE,L] 

Nota che ho usato il flag NE per impedire ad apache di sfuggire alla stringa della query. Senza questo flag, apache cambierà l’URL richiesto http://www.example.com/?foo%20bar in http://www.example.com/?foo%2250bar

 RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^/(.*)$ http://%1/$1 [R] 

Il RewriteCond cattura tutto nella variabile HTTP_HOST dopo il “www.” e lo salva in% 1. Il RewriteRule cattura l’URL (sans che porta “/”) e lo salva in $ 1.

Prova questo:

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

Se l’host inizia con www, rimuoviamo l’intero host all’inizio dell’URL, quindi togliamo il “www.”

Trovo che ci sia molta disinformazione là fuori sui reindirizzamenti htaccess, trovo. Prima di tutto, assicurati che il tuo sito sia in esecuzione su Unix usando Apache e non su un host Windows se pensi che questo codice funzioni.

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

(Assicurati che non ci siano spazi tra le righe di ogni testo, però: ho aggiunto uno spazio extra tra le righe in modo da renderlo ok in questa finestra.)

Questo è uno snippet di codice che può essere utilizzato per indirizzare la versione www del tuo sito alla versione http: //. Ci sono altri codici simili che possono essere usati anche.

Completa il gestore WWW generico, http / https

Non ho visto una risposta completa. Lo uso per gestire l’inclusione WWW.

  1. Generico. Non richiede informazioni sul dominio.
  2. Forza il WWW sul dominio principale: http://www.domain.com
  3. Rimuove il WWW sui sottodomini: sub.domain.com
  4. Preserva lo stato HTTP / HTTPS.
  5. Permette i singoli cookie per dominio / sottodomini

Per favore fatemi sapere come funziona o se ho lasciato una scappatoia.

 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] 

Per sottocartella

Per coloro che hanno bisogno di accedere all’intero sito SENZA il prefisso ‘www’.

 RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301] 

Mare sicuro di aggiungerlo al seguente file

 /site/location/.htaccess 

www per non www con 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] 

utilizzare: 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"; 

Oppure .htaccess:

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

e il metodo 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); } } }); 

Ho usato la regola precedente per cercare www su no www e funziona bene per la homepage, tuttavia nelle pagine interne che stanno inoltrando a /index.php

Ho trovato questa altra regola nel mio file .htaccess che sta causando questo, ma non sono sicuro di cosa fare al riguardo. Qualsiasi suggerimento sarebbe molto apprezzato:

 ############################################ ## 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] 

Non sono sicuro del motivo per cui vuoi rimuovere www. Ma la versione invertita sarebbe:

 # non-www.* -> www.*, if subdomain exist, wont work RewriteCond %{HTTP_HOST} ^whattimein\.com RewriteRule ^(.*)$ http://www.whattimein.com/$1 [R=permanent,L] 

E il vantaggio di questo script è che se hai qualcosa come test.whattimein.com o qualsiasi altro (ambiente per lo sviluppo / test) non reindirizzerà U all’ambiente originale.

L’unico modo in cui l’ho fatto funzionare …

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

Se stai forzando www. in url o forzando ssl prototcol, quindi prova ad usare le possibili variazioni nel file htaccess, come ad esempio:

 RewriteEngine On
 RewriteBase /

 ### Force WWW ###

 RewriteCond% {HTTP_HOST} ^ example \ .com
 RewriteRule (. *) Http://www.example.com/$1 [R = 301, L]

 ## Forza SSL ###

 RewriteCond% {SERVER_PORT} 80 
 RewriteRule ^ (. *) $ Https://example.com/$1 [R, L]

 ## Block IP ###
 Ordine Nega, Permetti
 Rifiuta da 256.251.0.139
 Rifiuta da 199.127.0.259
 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] 

Se si desidera rimuovere www su http e https , utilizzare quanto segue:

 RewriteEngine on RewriteCond %{HTTP_HOST} ^www\. RewriteCond %{HTTPS}s ^on(s)|offs RewriteRule ^ http%1://example.com%{REQUEST_URI} [NE,L,R] 

Questo reindirizza Non ssl

a

E SSL

a

su apache 2.4.* puoi farlo usando una direttiva Redirect with if ,

  Redirect / http://example.com/  

La risposta selezionata e molte altre soluzioni hanno lasciato cadere la parte dell’URL dopo /, quindi in pratica è sempre stato reindirizzato al dominio principale, almeno per me .. Quindi aggiungo campione funzionante rispettando il percorso completo dopo la barra ..

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

Questo è aggiornato per funzionare su Apache 2.4:

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

L’unica modifica rispetto a quella di Michael è rimuovere [NC] , che produce l’errore “AH00665”:

L’opzione NoCase per il modello non regex ‘-f’ non è supportata e verrà ignorata

Ciao, puoi usare le seguenti regole sul tuo file htaccess:

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