PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : .htaccess und mod_rewrite


johla
2018-12-27, 05:54:18
Wie stelle ich in einer .htaccess mit mod_rewrite am einfachsten ein, dass

1. alle http-Anfragen auf https umgeleitet werden (von allen Unterseiten)

2. dass alle Anfragen nach http[s]://[www.]meinewebsite.de[/index.html] auf https://www.meinewebseite.de (für die Hauptseite)

umgeleitet werden?


Momentan sieht mein Code so aus:

RewriteEngine On
RewriteCond %{SERVER_PORT} !=443
RewriteRule ^(.*)$ https://www.meinewebsite.de/$1 [R=301]
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301]
RewriteCond %{REQUEST_URI} /index\.html$
RewriteRule (.*?)(index\.html)?$ https://www.meinewebsite.de/$1 [NE,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [R=301,L]

Das kann man bestimmt besser machen.

Die erste Rule ist für 1., die zweite Rule macht https und www. hin und die dritte soll eine URL, die mit /index.html endet, abschneiden. Die vierte Regel entfernt ein / am Ende.

Ich habe mal https://wiki.selfhtml.org/wiki/Webserver/mod_rewrite gelesen und daher die "L" entfernt.

I N D I
2018-12-27, 10:11:38
Sehr viel kürzer würde ich es nicht machen, da habe ich schon deutlich längere htaccess gesehen ;)

Die zweite kann ich nicht komplett nachvollziehen bzw. würde ich kürzer machen.


RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301]


Die anderen beiden Conditions sind mMn nicht nötig.

johla
2018-12-27, 10:43:52
Danke! Der Code ist leicht modifiziert von https://github.com/phanan/htaccess#rewrite-and-redirection

Deine Vereinfachung klingt einleuchtend.

sei laut
2018-12-28, 15:49:52
[..]
Ich habe mal https://wiki.selfhtml.org/wiki/Webserver/mod_rewrite gelesen und daher die "L" entfernt.
Bei jedem redirect (also R=302/R=301) kann ein L hin, da das sowieso eine neue Anfrage seitens des Clients auslöst - habe ich nicht überprüft, sollte aber so sein.

Beim testen aber immer 302 nehmen und nur, wenn alles gut ist, 301 - 301 wird von Browser gecacht und man kann nicht mehr gescheit testen.

johla
2018-12-29, 07:34:15
Bei jedem redirect (also R=302/R=301) kann ein L hin, da das sowieso eine neue Anfrage seitens des Clients auslöst - habe ich nicht überprüft, sollte aber so sein.
Hat das Vorteile?

Momentan sind bei mir im Apache-Log viele Einträge "/index.html 301 -> / 200". Die Weiterleitungen kann man vermutlich nicht vermeiden?