fragen stichworte

Wie kann man mit .htaccess Nicht-WWW ohne Hardcoding an WWW umleiten?

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

... bewirkt eine perfekte, nicht hartcodierende 301-Weiterleitung von "www nach non-www". Wie würde das genaue Gegenteil aussehen?

BEARBEITEN:

Gemäß dem Beitrag von Prix habe ich die .htaccess -Datei folgendermaßen geändert:

Options +FollowSymLinks
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase/
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC]
  RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
</IfModule>

Wie bereits erwähnt, führt dies leider zu http://www./. Wer kann helfen?

antworten

Prix hätte es fast geschafft. Wenn Sie das RewriteCond (mit !) negieren, wird keine Aufnahme gemacht, daher ist %1 leer. Zwei mögliche Lösungen:

Dummy RewriteCond:

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

%{HTTP_HOST} in RewriteRule:

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

Zusammengefasst eine saubere, getestete Version des Codes:

Dies funktioniert (für mich), um WWW an Nicht-WWW umzuleiten

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

Entweder eine dieser Funktionen (für mich), um Nicht-WWW zu WWW

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

oder

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

das ! bedeutet, wenn es nicht mit "www ..." beginnt, dann senden Sie es an www.%1, das ist der (.+)

Folgendes hat bei mir immer mit Apache 2 funktioniert:

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