Ich verzweifle gerade an folgendem Problem. Gemäß der Seite omnespro.ch/blog/post/browsers…ewrite-regeln-in-htaccess habe ich eine automatische Umleitung des Users je nach im Browser eingestellter Sprache in meiner .htaccess eingestellt. D. h. wenn er die Startseite von example.com aufruft, wird er entweder nach example.com/de/ oder example.com/en/ weitergeleitet. Die Weiterleitung an sich funktioniert, aber nicht, wenn ich folgendes If drum herum habe:
Das If an sich funktioniert aber auch. Jeder andere Code darin, z. B. Definition einer Fehlerseite oder Weiterleitung auf HTTPS, klappt. Korrekterweise wird alles übersprungen, wenn der Zugriff auf Inhalte in einem Ordner mit dem Namen ".well-known" erfolgt.
Es gibt keine Fehlermeldung, sondern einfach nur keine Weiterleitung. Kommentiert man das If aus, geht's. Wieso? Übrigens scheint es am
Was läuft falsch? Mit ist klar, dass in dem Fall die If-Anweisung keinen Sinn ergibt (da ich sowieso nur die Startseite abfragen will), aber es handelt sich um eine allgemeine .htaccess für noch andere Sachen.
EDIT: Noch ein weiterer Fehler in diesem Zusammenhang (unabhängig von der Sprachauswahl): .htaccess auf example.net,
Ohne If:
example.net => example.com
example.net/index.php?p=1 => example.com/index.php?p=1
Mit If:
example.net => example.com/var/www/vhosts/example.com/
example.net/index.php?p=1 => example.com/var/www/vhosts/example.com/index.php?p=1
Das If macht irgendwas kaputt, evtl. die Variable
Shell-Script
- <If "%{REQUEST_URI} !~ m#/\.well-known/.+#">
- ## Der Let's-Encrypt-Certbot darf immer und ohne Umschreibungen zugreifen
- #### mod_rewrite einschalten
- RewriteEngine On
- RewriteBase /
- #### Umleitung je nach Sprache (nur bei Zugriff auf Startseite, die immer weiterleiten soll)
- ## Deutsch bevorzugt
- RewriteCond %{HTTP:Accept-Language} ^((?!en).)*de [NC]
- RewriteRule ^$ /de/ [L,R=302]
- ## Englisch bevorzugt
- RewriteCond %{HTTP:Accept-Language} ^((?!de).)*en [NC]
- RewriteRule ^$ /en/ [L,R=302]
- ## Standard
- RewriteRule ^$ /de/ [L,R=302]
- </If>
Das If an sich funktioniert aber auch. Jeder andere Code darin, z. B. Definition einer Fehlerseite oder Weiterleitung auf HTTPS, klappt. Korrekterweise wird alles übersprungen, wenn der Zugriff auf Inhalte in einem Ordner mit dem Namen ".well-known" erfolgt.
Es gibt keine Fehlermeldung, sondern einfach nur keine Weiterleitung. Kommentiert man das If aus, geht's. Wieso? Übrigens scheint es am
^$
nach RewriteRule zu liegen (aber eben nur innerhalb des If). Denn mache ich daraus ein ^(.*)$
, so wird es ausgeführt (führt aber logischerweise zu einer Endlosschleife).Was läuft falsch? Mit ist klar, dass in dem Fall die If-Anweisung keinen Sinn ergibt (da ich sowieso nur die Startseite abfragen will), aber es handelt sich um eine allgemeine .htaccess für noch andere Sachen.
EDIT: Noch ein weiterer Fehler in diesem Zusammenhang (unabhängig von der Sprachauswahl): .htaccess auf example.net,
RewriteRule ^(.*)$ http://example.com/$1 [QSA,R=301,L]
Ohne If:
example.net => example.com
example.net/index.php?p=1 => example.com/index.php?p=1
Mit If:
example.net => example.com/var/www/vhosts/example.com/
example.net/index.php?p=1 => example.com/var/www/vhosts/example.com/index.php?p=1
Das If macht irgendwas kaputt, evtl. die Variable
REQUEST_URI
?Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()