Apache/Wordpress: Umleitungen für unterschiedliche Sprachen konfigurieren

Debian macht sich hervorragend als Web- und Mailserver. Schau auch in den " Tipps und Tricks"-Bereich.
Antworten
Benutzeravatar
heisenberg
Beiträge: 3542
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Apache/Wordpress: Umleitungen für unterschiedliche Sprachen konfigurieren

Beitrag von heisenberg » 19.12.2022 21:08:27

Hallo zusammen,

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:
  1. 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
  2. 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
  3. 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.
Ansonsten ist die Seite noch per Basic-Authentisierung geschützt, da noch in Entwicklung. Dazu habe ich in der Apache Config(Standard Debian 11 System) folgendes eingestellt:

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>
Rufe ich jetzt egal welche der folgenden URLs im Browser auf bekomme ich immer einen HTTP 404 Error.

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 die Logzeilen so sehe, bin ich absolut ratlos, was da falsch läuft. Könnt Ihr bei mir für etwas Erleuchtung sorgen?

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
Jetzt wo ich das Log klarer vor mir sehe, verstehe ich schon mal warum der 404 auftritt. Der Webserver sucht ein Verzeichnis, dass z. B. /de/ oder /en/ heisst. Das gibt's nicht also: 404.

Nachtrag:

Aktuell habe ich erst einmal einen temporären Hostnamen für die Englische Sprache konfiguriert:

en.domain.tld -> http://domain.tld/en/
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Benutzeravatar
debilian
Beiträge: 1186
Registriert: 21.05.2004 14:03:04
Wohnort: 192.168.43.7
Kontaktdaten:

Re: Apache/Wordpress: Umleitungen für unterschiedliche Sprachen konfigurieren

Beitrag von debilian » 19.12.2022 22:05:57

ich hab das mal so gelöst:

Code: Alles auswählen

include_once ('func/browser_lang.php');

$allowed_langs = array ('es','en','de','fr');

$lang = lang_getfrombrowser ($allowed_langs, 'de', null, false);

//var_dump ($lang);
//print $lang;

if ($lang == de) {
include_once ('index.php');
}
if ($lang == en) {
include_once ('http://www.webseite.eu/en/index.php');
}
if($_SERVER['REQUEST_URI'] == "/index.php"){ 
	if ($lang == fr) {
		include_once ('index_fr1.php');
	}
}

if($_SERVER['REQUEST_URI'] == "/"){
        if ($lang == fr) {
                include_once ('index_fr1.php');
        }
}
https://www.a4l.de/sprachen_php.txt
https://www.a4l.de/browser_lang-php.txt

war für drupal sollte aber auch mit wp funktionieren....
-- nichts bewegt Sie wie ein GNU --

Benutzeravatar
heisenberg
Beiträge: 3542
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Apache/Wordpress: Umleitungen für unterschiedliche Sprachen konfigurieren

Beitrag von heisenberg » 19.12.2022 22:15:56

Das sieht brauchbar aus. Das reisst dann allerdings wieder die neue Baustelle auf, wie ich das Updatesicher reinbekomme.

Ansonsten gibt es diese Datei nicht: http://www.domain.tld/en/index.php. Es gibt nur http://www.domain.tld/index.php. Alles wird intern über eine index.php von Wordpress abgewickelt. Die Sprachsteuerung ist nur über den Anfang der URI gesteuert: ^/en/ -> Englisch. ^/de/ -> Deutsch.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Benutzeravatar
debilian
Beiträge: 1186
Registriert: 21.05.2004 14:03:04
Wohnort: 192.168.43.7
Kontaktdaten:

Re: Apache/Wordpress: Umleitungen für unterschiedliche Sprachen konfigurieren

Beitrag von debilian » 19.12.2022 22:21:05

das ist 12 Jahre her oder so, ich dachte nur, die php Abfragen könnten für dich hilfreich sein -
also die browser_lang.php....

gruss
-- nichts bewegt Sie wie ein GNU --

Benutzeravatar
debilian
Beiträge: 1186
Registriert: 21.05.2004 14:03:04
Wohnort: 192.168.43.7
Kontaktdaten:

Re: Apache/Wordpress: Umleitungen für unterschiedliche Sprachen konfigurieren

Beitrag von debilian » 19.12.2022 22:22:35

gesucht hast du sicher selbst schon:

https://stackoverflow.com/questions/305 ... ccordingly
-- nichts bewegt Sie wie ein GNU --

Benutzeravatar
heisenberg
Beiträge: 3542
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Apache/Wordpress: Umleitungen für unterschiedliche Sprachen konfigurieren

Beitrag von heisenberg » 19.12.2022 22:23:00

Ja. Ist auf jeden Fall nochmal ein anderer Ansatz. Insofern: Danke!
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Benutzeravatar
oln
Beiträge: 487
Registriert: 05.01.2021 09:41:24

Re: Apache/Wordpress: Umleitungen für unterschiedliche Sprachen konfigurieren

Beitrag von oln » 20.12.2022 07:45:04

Moin.
für Wordpress gibte jede Menge Multilingual-Plugins. Die Werden auch gepflegt wenn man das richtige findet.
Gruß Ole
AbuseIPDB

Benutzeravatar
heisenberg
Beiträge: 3542
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Apache/Wordpress: Umleitungen für unterschiedliche Sprachen konfigurieren

Beitrag von heisenberg » 20.12.2022 14:28:54

Ich verwende aktuell das Plugin "TranslatePress" und habe damit meine Seite im aktuellen Zustand schon übersetzt. Die bieten so eine Browser-Sprach-Weiche auch schon an. Da brauch ich dann allerdings eine kommerzielle Version. Diese kostet dann allerdings in der kleinsten Variante 89 EUR pro Jahr. Das finde ich nicht angemessen. So 50 EUR einmalig würde ich schon gerne geben, aber 89 EUR pro Jahr auf keinen Fall.

Insofern suche ich eine Lösung, die ich per Webserver-Konfiguration umsetzen kann. Ansonsten: Ja. Ich grabe mich auch nochmal durch die zig-Millionen Wordpress-Plugins durch. Vielleicht ist da auch noch etwas dabei und werde mich weiterhin nochmal intensiv dem Studium der Dokumentation von mod_rewrite widmen. Vielleicht bringt das auch nochmal was.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Benutzeravatar
heisenberg
Beiträge: 3542
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Apache/Wordpress: Umleitungen für unterschiedliche Sprachen konfigurieren

Beitrag von heisenberg » 22.12.2022 01:07:35

Mir ist aufgefallen, dass ich für die Sekundärsprache(Englisch) ja schon eine passende Domain in der passenden Sprache registriert habe. Insofern ist also alles super. Die Domain ist der optimale Einstiegspunkt für die Sekundärsprache.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Antworten