Ich habe eine Website, die nicht von Nicht-WWW zu WWW umzuleiten scheint.
Meine Apache-Konfiguration lautet wie folgt:
RewriteEngine On
### re-direct to www
RewriteCond %{http_host} !^www.example.com [nc]
RewriteRule ^(.*)$ http://www.example.com/$1 [r=301,nc]
Was vermisse ich?
apache
redirect
mod-rewrite
no-www
user121196
quelle
quelle
.htaccess
basierte Lösung schlage ich eine Antwort vor, die auf die diametrale Frage gestellt wurde: stackoverflow.com/a/5262044/367456Antworten:
Die Verwendung der Rewrite-Engine ist ein ziemlich schwerer Weg, um dieses Problem zu lösen. Hier ist eine einfachere Lösung:
Und dann haben Sie einen weiteren
<VirtualHost>
Abschnitt mitServerName www.example.com
für Ihre echte Serverkonfiguration. Apache behält nach der/
Verwendung derRedirect
Direktive automatisch alles bei , was ein weit verbreitetes Missverständnis darüber ist, warum diese Methode nicht funktioniert (obwohl dies tatsächlich der Fall ist).quelle
www.example
undexample
wo immer sie im Beispiel erscheinen.Redirect 301 / http://example2.com/extra/
aber wenn er umleitet, fehlt der abschließende Schrägstrich, was bedeutet, dassexample.com/blah
zuexample2.com/extrablah
. Irgendwelche Ideen? (Apache 2.2.22)http://example.com/subdir/?lold=13666
=>http://www.example.com/subdir/?lold=13666
quelle
example.com/subdi1/ws/*
mal ohne www durchgehen?s
zu http in der dritten Zeile hinzu.quelle
www.
in derServerAlias
?Verwenden Sie diesen Code in Ihrer Datei, um ihn
www
von IhrerURL
Website zu entfernen.htaccess
:Verwenden Sie diesen Code, um
www
Ihre Website zu erzwingenURL
.htaccess
Wo
YourSite.com
muss mit Ihrem ersetzt werdenURL
.quelle
Dies passiert mit dem obigen Code. Der erste virtuelle Hostblock prüft, ob die Anforderung www.example.com lautet, und führt Ihre Website in diesem Verzeichnis aus.
Andernfalls wird der zweite Abschnitt für den virtuellen Host aufgerufen. Hier wird alles andere als www.example.com zu www.example.com umgeleitet.
Die Reihenfolge hier ist wichtig. Wenn Sie zuerst die zweite virtualhost-Direktive hinzufügen, wird eine Umleitungsschleife ausgelöst.
Diese Lösung leitet jede Anfrage an Ihre Domain weiter, an www.IhreDomain.com.
Prost!
quelle
Dies ähnelt vielen anderen Vorschlägen mit einigen Verbesserungen:
%{REQUEST_URI}
Regeln.Der Pfadabschnitt, der nicht von vorherigen
RewriteRule
s wie betroffen%{REQUEST_URI}
ist, ist.quelle
Dies beginnt mit der
HTTP_HOST
Variablen, die nur den Domainnamen-Teil der eingehenden URL (example.com
) enthält. Angenommen, der Domainname enthält keinwww.
und stimmt genau mit Ihrem Domainnamen überein, dann kommt die RewriteRule ins Spiel. Das Muster^(.*)$
stimmt mit allem in derREQUEST_URI
Ressource überein , die in der HTTP-Anforderung (foo/blah/index.html
) angefordert wurde . Es speichert dies in einer Rückreferenz, die dann verwendet wird, um die URL mit dem neuen Domainnamen (einer, die mit beginnt) neu zu schreibenwww
) .[NC]
Zeigt einen Musterabgleich an, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird,[R=301]
zeigt eine externe Umleitung unter Verwendung des Codes 301 an (Ressource wird permanent verschoben),[L]
stoppt alle weiteren Umschreibungen und leitet sofort um.quelle
Umleitungscode für Nicht-www => www und gegenüber www => Nicht-www. Keine fest codierten Domänen und Schemata in der .htaccess-Datei. So bleiben die Ursprungsdomäne und die http / https-Version erhalten.
APACHE 2.4 UND NEUER
NON-WWW => WWW:
WWW => NICHT-WWW:
Hinweis: Funktioniert nicht mit Apache 2.2, wenn% {REQUEST_SCHEME} nicht verfügbar ist. Verwenden Sie zur Kompatibilität mit Apache 2.2 den folgenden Code oder ersetzen Sie% {REQUEST_SCHEME} durch festes http / https.
APACHE 2.2 UND NEUER
NON-WWW => WWW:
... oder kürzere Version ...
WWW => NICHT-WWW:
... kürzere Version nicht möglich, da% N nur ab der letzten RewriteCond verfügbar ist ...
quelle
Ich habe das gemacht ...
Ich brauche dies, um für mehr als 25 Domains auf unserem neuen Server universell zu sein, daher befindet sich diese Anweisung in meiner Datei virtual.conf in einem <Directory> -Tag. (dir ist allen docroots übergeordnet)
Ich musste die Umschreiberegel allerdings ein wenig hacken, da die vollständige Docroot für die Musterübereinstimmung durchgeführt wurde, obwohl http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html dies sagt darüber nur Sachen nach dem Host und Port.
quelle
Wenn Sie Apache 2.4 verwenden, ohne das Apache-Modul zum Umschreiben aktivieren zu müssen, können Sie Folgendes verwenden:
quelle
Leiten Sie domain.tld zu www um.
Die folgenden Zeilen können entweder in Apache-Anweisungen oder in der .htaccess-Datei hinzugefügt werden:
Vergessen Sie nicht, die Apache-Änderungen anzuwenden, wenn Sie den vhost ändern.
(basierend auf dem Standard-Drupal7 .htaccess, sollte aber in vielen Fällen funktionieren)
quelle
Das ist einfach!
quelle
Dadurch werden nicht nur der Domainname, sondern auch die inneren Seiten umgeleitet. Wie ...
example.com/abcd.html ==> www.example.com/abcd.html
example.com/ab/cd.html?ef=gh ==> www.example.com/ab/cd.html?ef=gh
quelle
Versuche dies:
quelle
Nicht immer verwenden
Redirect permanent
(oder warum es in Zukunft Probleme verursachen kann)Wenn die Möglichkeit besteht, dass Sie später Subdomains hinzufügen, verwenden Sie diese nicht
redirect permanent
.Denn wenn ein Client eine Subdomain verwendet hat, als die nicht registriert wurde
VirtualHost
erreicht er diese Subdomain möglicherweise auch dann nicht, wenn sie später registriert wird.redirect permanent
sendet eineHTTP 301 Moved Permanently
an den Client (Browser) und viele von ihnen zwischenspeichern diese Antwort für immer (bis der Cache [manuell] geleert wird). Wenn Sie diese Subdomain verwenden, wird immer automatisch zu www. *** weitergeleitet, ohne den Server erneut anzufordern.Siehe Wie lange zwischenspeichern Browser HTTP 301s?
Also einfach benutzen
Redirect
Apache.org - Wenn Sie mod_rewrite nicht verwenden
Apache.org - Kanonische Hostnamen
quelle
RewriteEngine On RewriteCond %{HTTP_HOST} ^yourdomain.com [NC] RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [L,R=301]
Überprüfen Sie diese perfekte Arbeit
quelle
Ich habe nur das gleiche Problem. Aber damit gelöst
RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Diese Regel leitet Nicht-WWW zu WWW um.
Und diese Regel zur Umleitung von www zu nicht-www
RewriteEngine On RewriteCond %{HTTP_HOST} !^my-domain\.com$ [NC] RewriteRule ^(.*)$ http://my-domain.com/$1 [R=301,L]
Siehe http://dense13.com/blog/2008/02/27/redirecting-non-www-to-www-with-htaccess/
quelle
Das funktioniert bei mir:
Ich verwende das Look-Ahead-Muster
(?!www.domain.com)
, um diewww
Subdomain auszuschließen, wenn alle Domains in diewww
Subdomain umgeleitet werden, um eine Endlosumleitungsschleife in Apache zu vermeiden.quelle
Der Code, den ich benutze, ist:
quelle
-Wenn Sie mehrere Domainnamen hosten (optional)
-Wenn alle diese Domain-Namen https verwenden (wie sie sollten)
-wenn Sie möchten, dass alle diese Domainnamen www dot domainName verwenden
Dadurch wird eine doppelte Umleitung vermieden (http: // non www zu http: // www und dann zu https: // www).
Und
Sie sollten den Umleitungscode 301 in den bequemsten ändern
quelle
Bei Verwendung der obigen Lösung von zwei
<VirtualHost *:80>
Blöcken mit unterschiedlichenServerName
...... dann sind Sie müssen festlegen ,
NameVirtualHost On
wie gut .Wenn Sie dies nicht tun, erlaubt sich Apache nicht, die verschiedenen
ServerName
s zur Unterscheidung der Blöcke zu verwenden, sodass folgende Fehlermeldung angezeigt wird:... und entweder findet keine Umleitung statt, oder Sie haben eine Endlosumleitungsschleife, je nachdem, welchen Block Sie zuerst setzen.
quelle
Ich hatte eine ähnliche Aufgabe auf einer WP Multisite, bei der die Umleitungsregel generisch sein musste (für jede bestimmte Domain, die ich dem Netzwerk hinzufügen würde). Ich habe zuerst einen Platzhalter zur Domain hinzugefügt (geparkte Domain). Beachten Sie das . nach .com.
Und dann habe ich die folgenden Zeilen zur .htaccess-Datei im Stammverzeichnis meiner Multisite hinzugefügt. Ich denke, es würde für jede Site funktionieren.
Hoffentlich hilft das.
ps. Wenn Sie von nicht www zu www umleiten möchten, ändern Sie die letzte Zeile in
quelle
Ich fand es einfacher (und nützlicher), ServerAlias zu verwenden, wenn mehrere vhosts verwendet werden.
Dies funktioniert auch mit https vhosts.
quelle