web-dev-qa-db-de.com

Generisches htaccess-Redirect www zu non-www

Ich möchte www.example.com zu example.com umleiten. Der folgende htaccess-Code macht dies möglich:

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

Aber gibt es eine Möglichkeit, dies generisch zu tun, ohne den Domain-Namen fest zu codieren?

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

Entspricht Michaels mit der Ausnahme, dass dieses funktioniert: P

856
Ben

Aber wenn wir dies für getrennte http und https tun müssen:

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]
106
Andron

Redirect non-www to www (beide: 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]
71
Dmitriy

Wenn Sie dies in der Datei httpd.conf tun möchten, können Sie dies ohne mod_rewrite tun (und anscheinend ist es für die Leistung besser).

<VirtualHost *>
  ServerName www.example.com
  Redirect 301 / http://example.com/
</VirtualHost>

Ich habe diese Antwort hier erhalten: https://serverfault.com/questions/120488/redirect-url-within-Apache-virtualhost/120507#120507

44
William Denniss

Hier sind die Regeln, um eine WWW-URL an no-www umzuleiten:

#########################
# redirect www to no-www
#########################

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

Hier sind die Regeln, um eine URL ohne WWW an WWW umzuleiten:

#########################
# redirect no-www to www
#########################

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

Beachten Sie, dass ich das NE -Flag verwendet habe, um zu verhindern, dass Apache die Abfragezeichenfolge maskiert. Ohne dieses Flag ändert Apache die angeforderte URL http://www.example.com/?foo%20bar in http://www.example.com/?foo%2250bar.

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

Das RewriteCond erfasst alles in der HTTP_Host -Variablen nach dem www. und speichert es in %1.

Die RewriteRule erfasst die URL ohne den führenden / und speichert sie in $1.

11
Michael Cramer

Versuche dies:

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

Wenn der Host mit www beginnt, kleben wir den gesamten Host auf den Anfang der URL und entfernen dann das "www".

7
Greg

Vollständiger generischer WWW-Handler, http/https

Ich habe keine vollständige Antwort gesehen. Ich benutze dies, um die WWW-Aufnahme zu handhaben.

  1. Generisch. Benötigt keine Domain-Informationen.
  2. Zwingt das WWW auf die primäre Domain: www.domain.com
  3. Entfernt WWW auf Subdomains: sub.domain.com
  4. Behält den HTTP/HTTPS-Status bei.
  5. Ermöglicht individuelle Cookies für Domain/Sub-Domains

Bitte lassen Sie mich wissen, wie das funktioniert oder ob ich eine Lücke hinterlassen habe.

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

Ich finde, es kann eine Menge Fehlinformationen über htaccess-Weiterleitungen geben. Stellen Sie zunächst sicher, dass Ihre Site unter Unix mit Apache und nicht auf einem Windows-Host ausgeführt wird, wenn Sie erwarten, dass dieser Code funktioniert.

RewriteEngine On

RewriteCond %{HTTP_Host} ^www\.(.+)$ [NC]

RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

(Stellen Sie jedoch sicher, dass keine Zeilenabstände zwischen den einzelnen Textzeilen vorhanden sind. Ich habe einen zusätzlichen Abstand zwischen den Zeilen eingefügt, damit die Darstellung in diesem Fenster in Ordnung ist.)

Dies ist ein Codeausschnitt, mit dem Sie die WWW-Version Ihrer Website auf die http: // -Version umleiten können. Es gibt auch andere ähnliche Codes, die verwendet werden können.

6

Für diejenigen, die in der Lage sein müssen, auf die gesamte Site zuzugreifen OHNE das Präfix 'www'.

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

Stellen Sie sicher, dass Sie dies der folgenden Datei hinzufügen

/site/location/.htaccess 
3
Rick
RewriteCond %{HTTP_Host} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/subfolder/$1 [R=301,L]

Für Unterordner

3
pelajar

www zu nicht www mit 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]
3

Verwenden von .htaccess, um zu www oder Nicht-www umzuleiten:

Fügen Sie einfach die folgenden Codezeilen in Ihre Haupt-.htaccess-Stammdatei ein. In beiden Fällen ändern Sie einfach domain.com in Ihren eigenen Hostnamen.

Weiterleiten an www

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTP_Host} ^domain\.com [NC]
  RewriteRule ^(.*)$ http://wwwDOTdomainDOtcom/$1 [L,R=301]
</IfModule>

Weiterleiten an nicht-www

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTP_Host} ^www\.domain\.com [NC]
  RewriteRule ^(.*)$ http://domainDOTcom/$1 [L,R=301]
</IfModule>

ändere DOT auf =>. !!!

3
Rohallah Hatami
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]

Wenn Sie www sowohl für http als auch für https entfernen möchten, verwenden Sie Folgendes:

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

Dies leitet Non ssl

zu

Und SSL

zu

auf Apache 2.4.* können Sie dies mit einer Redirect mit if-Direktive erreichen.

<if "%{HTTP_Host} =='www.example.com'">
Redirect / http://example.com/
</if>
2
starkeen

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

Oder .htaccess:

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

und Die PHP Methode:

$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);
        }
    }
});
2

Ich habe die obige Regel verwendet, um www zu no www zu fwd und es funktioniert gut für die Homepage, jedoch auf den internen Seiten, die sie an /index.php weiterleiten

Ich habe diese andere Regel in meiner .htaccess-Datei gefunden, die dies verursacht, weiß aber nicht, was ich dagegen tun soll. Anregungen wären toll:

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

Die ausgewählte Antwort und viele andere Lösungen hier haben den Teil der URL nach/entfernt, so dass sie zumindest für mich grundsätzlich immer an die Hauptdomäne weitergeleitet wird.

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

Nur so konnte ich es zum Laufen bringen ...

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

Wenn Sie zwingen, www. Versuchen Sie dann, in der URL oder beim Forcen von SSL-Protokollen mögliche Variationen in der HTAccess-Datei zu verwenden, z. B .:

 RewriteEngine On 
 RewriteBase /[.____.[.____.‹### Force WWW ### 
 
 RewriteCond% {HTTP_Host} ^ example\.com 
 RewriteRule (. *) http://www.example.com/$1 [R = 301, L] 
 
 ## SSL erzwingen ### 
 
 RewriteCond% {SERVER_PORT} 80 
 RewriteRule ^ (. *) $ Https://example.com/$1 [R, L] 
 
 # # IPs blockieren ### 
 Reihenfolge Verweigern, Zulassen 
 Verweigern von 256.251.0.139 
 Verweigern von 199.127.0.259 
1
mystique

Dies wurde aktualisiert, um mit Apache 2.4 zu funktionieren:

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

Die einzige Änderung gegenüber Michaels besteht darin, den [NC] zu entfernen, der den Fehler "AH00665" erzeugt:

NoCase-Option für Nicht-Regex-Muster '-f' wird nicht unterstützt und ignoriert

0

Ich bin mir nicht sicher, warum du www entfernen willst. Aber umgekehrte Version wäre:

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

Und der Vorteil dieses Skripts ist: Wenn Sie über etwas wie test.whattimein.com oder eine andere Umgebung (Entwicklungs-/Testumgebung) verfügen, wird U nicht zur ursprünglichen Umgebung umgeleitet.

0
local