ich beisse mir gerade wieder mal die Zähne aus dabei eine Umleitung gemäß Browser-Sprache zu basteln für ein Wordpress-System.
Da bei soll das ungefähr so gehen:
- Benutzer hat in seinem Browser hat "Deutsch"(de,de_de,de_DE) in seinem Browser eingestellt. Startseite(= "/") geht auf die Default URI "http://www.domain.tld/de/", aber nur, wenn im Referer nicht www.domain.tld drin steht
- Benutzer hat in seinem Browser hat "Englisch"(en,en_US,en_GB) in seinem Browser eingestellt. Seite geht auf die englische URI "http://www.domain.tld/en/". Startseite(= "/") geht auf die Default URI "http://www.domain.tld/en/", aber nur, wenn im Referer nicht www.domain.tld drin steht
- Der HTTP-Referer wird geprüft, damit - falls der Benutzer manuell auf Englisch/Deutsch umschaltet, dass das dann auch unabhängig von der Browsereinstellung auch funktioniert.
Code: Alles auswählen
<Location />
# die folgende nächste Zeile habe ich auch mit en_US und en_GB ohne Erfolg getestet
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteCond "%{HTTP_REFERER}" "!www.domain.tld" [NC]
RewriteCond %{REQUEST_URI} ^/?$
RewriteRule ^/$ http://www.domain.tld/en/ [R=302,L]
</Location>
Daneben gibt's im doc-root vom Wordpress noch eine .htaccess mit diesem Inhalt:
Code: Alles auswählen
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
http://www.domain.tld/de/
http://www.domain.tld/en/
Das ist im Log für zwei Requests bei Log rewrite:trace3:
Code: Alles auswählen
# mit Browser(chromium) auf Language: en
[Mon Dec 19 21:01:50.916486 2022] [rewrite:trace3] [pid 152482] mod_rewrite.c(486): [client 1.2.3.4:57158] 1.2.3.4 - dev [www.domain.tld/sid#7f133adeef30][rid#7f133af290a0/initial] [perdir /] add path info postfix: /var/www/www.domain.tld/wwwroot/de -> /var/www/www.domain.tld/wwwroot/de/
[Mon Dec 19 21:01:50.916797 2022] [rewrite:trace3] [pid 152482] mod_rewrite.c(486): [client 1.2.3.4:57158] 1.2.3.4 - dev [www.domain.tld/sid#7f133adeef30][rid#7f133af290a0/initial] [perdir /] strip per-dir prefix: /var/www/www.domain.tld/wwwroot/de/ -> var/www/www.domain.tld/wwwroot/de/
[Mon Dec 19 21:01:50.916811 2022] [rewrite:trace3] [pid 152482] mod_rewrite.c(486): [client 1.2.3.4:57158] 1.2.3.4 - dev [www.domain.tld/sid#7f133adeef30][rid#7f133af290a0/initial] [perdir /] applying pattern '^/$' to uri 'var/www/www.domain.tld/wwwroot/de/'
[Mon Dec 19 21:01:50.916851 2022] [rewrite:trace1] [pid 152482] mod_rewrite.c(486): [client 1.2.3.4:57158] 1.2.3.4 - dev [www.domain.tld/sid#7f133adeef30][rid#7f133af290a0/initial] [perdir /] pass through /var/www/www.domain.tld/wwwroot/de
# mit Browser(chromium) auf Language: de
[Mon Dec 19 21:02:10.779649 2022] [rewrite:trace3] [pid 152486] mod_rewrite.c(486): [client 1.2.3.4:53816] 1.2.3.4 - dev [www.domain.tld/sid#7f133adeef30][rid#7f133af290a0/initial] [perdir /] add path info postfix: /var/www/www.domain.tld/wwwroot/de -> /var/www/www.domain.tld/wwwroot/de/
[Mon Dec 19 21:02:10.779726 2022] [rewrite:trace3] [pid 152486] mod_rewrite.c(486): [client 1.2.3.4:53816] 1.2.3.4 - dev [www.domain.tld/sid#7f133adeef30][rid#7f133af290a0/initial] [perdir /] strip per-dir prefix: /var/www/www.domain.tld/wwwroot/de/ -> var/www/www.domain.tld/wwwroot/de/
[Mon Dec 19 21:02:10.779735 2022] [rewrite:trace3] [pid 152486] mod_rewrite.c(486): [client 1.2.3.4:53816] 1.2.3.4 - dev [www.domain.tld/sid#7f133adeef30][rid#7f133af290a0/initial] [perdir /] applying pattern '^/$' to uri 'var/www/www.domain.tld/wwwroot/de/'
[Mon Dec 19 21:02:10.779748 2022] [rewrite:trace1] [pid 152486] mod_rewrite.c(486): [client 1.2.3.4:53816] 1.2.3.4 - dev [www.domain.tld/sid#7f133adeef30][rid#7f133af290a0/initial] [perdir /] pass through /var/www/www.domain.tld/wwwroot/de
Wenn ich ohne die Umleitung jeweils http://www.domain.tld/de/ oder http://www.domain.tld/en/ im Browser eingebe, dann wird jeweils die Seite in der gewünschten Sprache korrekt geladen. Ich komme auf die deutsche Seite.
Das ist das Log für einen Aufruf der / - URI, was dann auf /de/ umgeleitet wird:
Code: Alles auswählen
[Mon Dec 19 21:11:40.450638 2022] [rewrite:trace3] [pid 152664] mod_rewrite.c(486): [client 1.2.3.4´:57560] 1.2.3.4´ - dev [www.domain.tld/sid#7f2e33e80f30][rid#7f2e33fbb0a0/initial] [perdir /var/www/www.domain.tld/wwwroot/] add path info postfix: /var/www/www.domain.tld/wwwroot/de -> /var/www/www.domain.tld/wwwroot/de/
[Mon Dec 19 21:11:40.450734 2022] [rewrite:trace3] [pid 152664] mod_rewrite.c(486): [client 1.2.3.4´:57560] 1.2.3.4´ - dev [www.domain.tld/sid#7f2e33e80f30][rid#7f2e33fbb0a0/initial] [perdir /var/www/www.domain.tld/wwwroot/] strip per-dir prefix: /var/www/www.domain.tld/wwwroot/de/ -> de/
[Mon Dec 19 21:11:40.450746 2022] [rewrite:trace3] [pid 152664] mod_rewrite.c(486): [client 1.2.3.4´:57560] 1.2.3.4´ - dev [www.domain.tld/sid#7f2e33e80f30][rid#7f2e33fbb0a0/initial] [perdir /var/www/www.domain.tld/wwwroot/] applying pattern '.*' to uri 'de/'
[Mon Dec 19 21:11:40.450761 2022] [rewrite:trace3] [pid 152664] mod_rewrite.c(486): [client 1.2.3.4´:57560] 1.2.3.4´ - dev [www.domain.tld/sid#7f2e33e80f30][rid#7f2e33fbb0a0/initial] [perdir /var/www/www.domain.tld/wwwroot/] add path info postfix: /var/www/www.domain.tld/wwwroot/de -> /var/www/www.domain.tld/wwwroot/de/
[Mon Dec 19 21:11:40.450771 2022] [rewrite:trace3] [pid 152664] mod_rewrite.c(486): [client 1.2.3.4´:57560] 1.2.3.4´ - dev [www.domain.tld/sid#7f2e33e80f30][rid#7f2e33fbb0a0/initial] [perdir /var/www/www.domain.tld/wwwroot/] strip per-dir prefix: /var/www/www.domain.tld/wwwroot/de/ -> de/
[Mon Dec 19 21:11:40.450779 2022] [rewrite:trace3] [pid 152664] mod_rewrite.c(486): [client 1.2.3.4´:57560] 1.2.3.4´ - dev [www.domain.tld/sid#7f2e33e80f30][rid#7f2e33fbb0a0/initial] [perdir /var/www/www.domain.tld/wwwroot/] applying pattern '^index\\.php$' to uri 'de/'
[Mon Dec 19 21:11:40.450804 2022] [rewrite:trace3] [pid 152664] mod_rewrite.c(486): [client 1.2.3.4´:57560] 1.2.3.4´ - dev [www.domain.tld/sid#7f2e33e80f30][rid#7f2e33fbb0a0/initial] [perdir /var/www/www.domain.tld/wwwroot/] add path info postfix: /var/www/www.domain.tld/wwwroot/de -> /var/www/www.domain.tld/wwwroot/de/
[Mon Dec 19 21:11:40.450813 2022] [rewrite:trace3] [pid 152664] mod_rewrite.c(486): [client 1.2.3.4´:57560] 1.2.3.4´ - dev [www.domain.tld/sid#7f2e33e80f30][rid#7f2e33fbb0a0/initial] [perdir /var/www/www.domain.tld/wwwroot/] strip per-dir prefix: /var/www/www.domain.tld/wwwroot/de/ -> de/
[Mon Dec 19 21:11:40.450821 2022] [rewrite:trace3] [pid 152664] mod_rewrite.c(486): [client 1.2.3.4´:57560] 1.2.3.4´ - dev [www.domain.tld/sid#7f2e33e80f30][rid#7f2e33fbb0a0/initial] [perdir /var/www/www.domain.tld/wwwroot/] applying pattern '.' to uri 'de/'
[Mon Dec 19 21:11:40.450842 2022] [rewrite:trace2] [pid 152664] mod_rewrite.c(486): [client 1.2.3.4´:57560] 1.2.3.4´ - dev [www.domain.tld/sid#7f2e33e80f30][rid#7f2e33fbb0a0/initial] [perdir /var/www/www.domain.tld/wwwroot/] rewrite 'de/' -> '/index.php'
[Mon Dec 19 21:11:40.450853 2022] [rewrite:trace2] [pid 152664] mod_rewrite.c(486): [client 1.2.3.4´:57560] 1.2.3.4´ - dev [www.domain.tld/sid#7f2e33e80f30][rid#7f2e33fbb0a0/initial] [perdir /var/www/www.domain.tld/wwwroot/] trying to replace prefix /var/www/www.domain.tld/wwwroot/ with /
[Mon Dec 19 21:11:40.450863 2022] [rewrite:trace2] [pid 152664] mod_rewrite.c(486): [client 1.2.3.4´:57560] 1.2.3.4´ - dev [www.domain.tld/sid#7f2e33e80f30][rid#7f2e33fbb0a0/initial] [perdir /var/www/www.domain.tld/wwwroot/] trying to replace context docroot /var/www/www.domain.tld/wwwroot with context prefix
[Mon Dec 19 21:11:40.450871 2022] [rewrite:trace1] [pid 152664] mod_rewrite.c(486): [client 1.2.3.4´:57560] 1.2.3.4´ - dev [www.domain.tld/sid#7f2e33e80f30][rid#7f2e33fbb0a0/initial] [perdir /var/www/www.domain.tld/wwwroot/] internal redirect with /index.php [INTERNAL REDIRECT]
[Mon Dec 19 21:11:40.451399 2022] [rewrite:trace3] [pid 152664] mod_rewrite.c(486): [client 1.2.3.4´:57560] 1.2.3.4´ - dev [www.domain.tld/sid#7f2e33e80f30][rid#7f2e30df94f0/initial/redir#1] [perdir /var/www/www.domain.tld/wwwroot/] strip per-dir prefix: /var/www/www.domain.tld/wwwroot/index.php -> index.php
[Mon Dec 19 21:11:40.451417 2022] [rewrite:trace3] [pid 152664] mod_rewrite.c(486): [client 1.2.3.4´:57560] 1.2.3.4´ - dev [www.domain.tld/sid#7f2e33e80f30][rid#7f2e30df94f0/initial/redir#1] [perdir /var/www/www.domain.tld/wwwroot/] applying pattern '.*' to uri 'index.php'
[Mon Dec 19 21:11:40.451428 2022] [rewrite:trace3] [pid 152664] mod_rewrite.c(486): [client 1.2.3.4´:57560] 1.2.3.4´ - dev [www.domain.tld/sid#7f2e33e80f30][rid#7f2e30df94f0/initial/redir#1] [perdir /var/www/www.domain.tld/wwwroot/] strip per-dir prefix: /var/www/www.domain.tld/wwwroot/index.php -> index.php
[Mon Dec 19 21:11:40.451437 2022] [rewrite:trace3] [pid 152664] mod_rewrite.c(486): [client 1.2.3.4´:57560] 1.2.3.4´ - dev [www.domain.tld/sid#7f2e33e80f30][rid#7f2e30df94f0/initial/redir#1] [perdir /var/www/www.domain.tld/wwwroot/] applying pattern '^index\\.php$' to uri 'index.php'
[Mon Dec 19 21:11:40.451445 2022] [rewrite:trace1] [pid 152664] mod_rewrite.c(486): [client 1.2.3.4´:57560] 1.2.3.4´ - dev [www.domain.tld/sid#7f2e33e80f30][rid#7f2e30df94f0/initial/redir#1] [perdir /var/www/www.domain.tld/wwwroot/] pass through /var/www/www.domain.tld/wwwroot/index.php
Nachtrag:
Aktuell habe ich erst einmal einen temporären Hostnamen für die Englische Sprache konfiguriert:
en.domain.tld -> http://domain.tld/en/