Leiten Sie alle Seiten auf Nicht-WWW und eine Seite auf WWW um.

Leiten Sie alle Seiten auf Nicht-WWW und eine Seite auf WWW um.

Ich möchte alle meine internen Seiten (z. B.: ) auf ihre Nicht-WWW-Version umleiten example.com/about, aber ich möchte, dass meine Homepage ( https://example.com) auf ihre WWW-Version ( ) umgeleitet wird https://www.example.com.

Ich habe im Internet nach vielen Artikeln gesucht, aber es hat nicht funktioniert.

Wenn beide Regeln festgelegt sind, werden die internen Seiten zwar problemlos umgeleitet, die Homepage bleibt jedoch in einer Schleife gefangen.

Ich weiß nicht, wie man Code schreibt, also bitte ich Sie, den Code zu schreiben, den ich in meine .htaccessDatei einfügen soll.

Derzeit habe ich alle Seiten so eingestellt, dass sie mit dem folgenden Code auf ihre Nicht-WWW-Versionen (sogar die Homepage) umgeleitet werden:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
</IfModule>
# BEGIN Sitepad
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
# END Sitepad

Antwort1

Ich habe im Internet nach vielen Artikeln gesucht, aber es hat nicht funktioniert.

Wahrscheinlich, weil dies eine seltsame Anforderung ist. Es würde mich überraschen, wenn Sie Code finden würden, der dies einfach kopieren/einfügen kann.

Vorausgesetzt jedoch, Sie konstruieren die richtige absolute URL für alle Ihre internen Links (da Sie intern nicht auf eine URL verlinken dürfen, die umleitet), ist dies relativ einfach zu implementieren, .htaccesswenn Sie Ihre vorhandenen Anweisungen verstehen.

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

Der reguläre Ausdruck .*in derRewriteRule MusterStreichhölzeralles. Insbesondere entspricht es 0 oder mehr beliebigen Zeichen, wie durch den *Quantifizierer angegeben. Es entspricht dem leeren URL-Pfad (also der „Homepage“) und jedem nicht leeren URL-Pfad (also allem anderen).

Sie müssen den obigen regulären Ausdruck so ändern, dass er mit einem nicht leeren URL-Pfad übereinstimmt (also mit allem außer der Homepage). Und erstellen Sie eine weitere Regel (in die andere Richtung), die nur mit einem leeren URL-Pfad übereinstimmt.

(Hierbei wird die Tatsache ausgenutzt, dass mod_dir für Anfragen an die Homepage dient index.php, nicht die folgenden mod_rewrite-Direktiven.)

Um 1 oder mehr abzugleichen (d. h. nicht leeren URL-Pfad), können Sie den +Quantifizierer (Plus) anstelle von *(Stern/Asterisk) verwenden.

Zum Beispiel:

# Redirect everything except the homepage (from www to non-www)
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.+)$ https://example.com/$1 [L,R=301]

# Redirect the homepage only (from non-www to www)
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^$ https://www.example.com/ [L,R=301]

Sie müssen vor dem Testen den Cache Ihres Browsers leeren, da die frühere (permanente) 301-Weiterleitung, die die Startseite von www auf nicht-www umgeleitet hat, vom Browser zwischengespeichert wurde.

Testen Sie zuerst mit 302 (temporären) Weiterleitungen, um potenzielle Caching-Probleme zu vermeiden.

verwandte Informationen