Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rex_yrewrite::getDomainByName() findet Domain nicht #556

Open
iceman-fx opened this issue Sep 27, 2023 · 11 comments
Open

rex_yrewrite::getDomainByName() findet Domain nicht #556

iceman-fx opened this issue Sep 27, 2023 · 11 comments

Comments

@iceman-fx
Copy link

getDomainByName() findet die korrekte Domain nicht, wenn ein und dieselbe Domain in verschiedenen Varianten angelegt wurde.

"domain.de"
"https://domain.de"
"domain.de/"
"https://domain.de/"
...

Zusätzlich problematisch ist dabei, dass im Domainobjekt als Name bei allen 3 Varianten immer nur "domain.de" steht.

Man kann daher z.B. hiermit getDomainByName($_SERVER['SERVER_NAME']) nicht auf das korrekte Domainobjekt zugreifen, wenn die Domain mit https oder / angelegt wurde.

Lt. Anleitung ist "https" und "/" optional, was es aber anscheinend doch nicht ist, da alle 3 Varianten unterschiedliche Domains für YRewrite sind. Praktisch sind es aber alle die gleiche Domain, da https und der / nicht zur eigentlichen Domain gehören.

@tbaddade
Copy link
Member

Was willst du denn mit dem Anlegen der 4 Varianten erreichen? Der einzige Unterschied ist, wie das im Nachhinein mit dem Protokoll weiter geht.

@iceman-fx
Copy link
Author

Genau das ist ja das Problem.
Ich kann bis zu 6 Varianten anlegen, obwohl alles das gleiche wäre.

Damit kann man nicht wirklich sicher über den Domainnamen prüfen, da man u.U. nicht weiß, wie die Domain angelegt wurde damit die Prüfung erfolgreich ist.

@tbaddade
Copy link
Member

tbaddade commented Sep 28, 2023

Ich vermute was du suchst, ist das hier

dd(rex_yrewrite::getCurrentDomain());

Falls es das nicht ist, könntest du mehr Kontext liefern? Ich verstehe noch nicht ganz dein Problem.
Willst du über SERVER_NAME gehen, dann müsstest du diesen ggf. selbst normalisieren, wobei bei mir hier domain.de, also ohne Scheme drin steht.

@iceman-fx
Copy link
Author

rex_yrewrite::getCurrentDomain() ist es nicht. Das liefert nicht die korrekte Domain, da es nur eine Domain aus seiner definierten Liste liefert, aber nicht die tatsächlich aktuell genutzte Domain.

@iceman-fx
Copy link
Author

Die aktuelle Domain lese ich mit SERVER_NAME aus. Soweit klar.
Jetzt muss/will ich dies aber mit der YRewrite-Domain gegen prüfen, ob diese angelegt wurde.

Dabei kann es schnell passieren, dass die Schreibweise zum gegenprüfen (getDomainByName()) nicht stimmt, da diese Funktion lediglich den in der DB befindlichen (angelegten) Namen zur Prüfung heranzieht.
Und wenn da jemand z.B. dies mit https und/oder End-Slash gemacht hat, klappt es nicht.

Lässt man sich zusätzlich noch das YRewrite-Domain-Objekt ausgeben, dann steht da aber immer der reine Domainname drin.

Bsp:
Suche nach "domain.de" mit getDomainByName() findet nicht "https://domain.de" oder "domain.de/".
Bei allen angelegten Varianten steht aber im Domain-Objekt immer "domain.de" drin. D.h. bis zu 6x mal der gleiche Domainname.

@tbaddade
Copy link
Member

Jetzt muss/will ich dies aber mit der YRewrite-Domain gegen prüfen, ob diese angelegt wurde.

if (null === rey_yrewrite::getDomainByName($_SERVER['SERVER_NAME']) {
    // Domain existiert in yrewrite nicht
}

@DanielWeitenauer
Copy link
Contributor

Ist das denn ein praktisches oder ein theoretisches Problem? D.h. wie wahrscheinlich is es, dass jemand auf die Idee kommt, sechs Varianten der gleichen Domain mit unterschiedlichen Attributen anzulegen?

Technisch ist es ja so, dass die Datenbank-Einträge von Yrewrite normalisiert und im Ordner redaxo/cache gespeichert werden. D.h. Slashes werden aus dem Domainnamen entfernt und das Protokoll extrahiert. Von dort werden sie in ein Array mit dem normalisierten Domainnamen als Key eingelesen. D.h., dass Yrewrite immer mit dem letzten Eintrag zur jeweiligen Domain arbeitet, die übrigen werden jeweils vom Folgeeintrag überschrieben.

@iceman-fx
Copy link
Author

iceman-fx commented Sep 28, 2023

@DanielWeitenauer Ist ein praktisches Problem, wenn mehrere Personen daran arbeiten und einer nicht aufpasst beim Anlegen.

Ich habe es getestet, da ich aktuell ein Projekt habe, wo ich mit SERVER_NAME gegenprüfen will.
Und das klappt nicht, wenn ich die Domain z.B. mit https in YRewrite anlege.

@iceman-fx
Copy link
Author

iceman-fx commented Sep 28, 2023

@tbaddade Das klappt eben bei mir nicht, wenn die Domain mit https in YRewrite angelegt wurde.
Domain existiert ja, aber eben nicht in SERVER_NAME Schreibweise.

@DanielWeitenauer
Copy link
Contributor

DanielWeitenauer commented Sep 28, 2023

@iceman-fx

Lt. Anleitung ist "https" und "/" optional, was es aber anscheinend doch nicht ist, da alle 3 Varianten unterschiedliche Domains für YRewrite sind. Praktisch sind es aber alle die gleiche Domain, da https und der / nicht zur eigentlichen Domain gehören.

Dies scheint ein Missverständnis zu sein. Du kannst zwar verschiedene Datenbankeinträge mit und ohne https etc. für eine Domain anlegen, jedoch werden sie von Yrewrite intern alle als die gleiche Domain behandelt. Daher ist Yrewrite jeweils nur der letzte Eintrag bekannt.

Hast du mal mit rex_yrewrite::getDomains() geprüft, ob der gesuchte Eintrag Yrewrite überhaupt bekannt ist?

@tbaddade
Copy link
Member

Das klappt eben bei mir nicht, wenn die Domain mit https in YRewrite angelegt wurde.
Domain existiert ja, aber eben nicht in SERVER_NAME Schreibweise.

Meine Antwort von oben:

Willst du über SERVER_NAME gehen, dann müsstest du diesen ggf. selbst normalisieren

Du musst SERVER_NAME selbst normalisieren, damit der Abgleich mit yrewrite funktioniert. yrewrite speichert den Eintrag immer als domain.de oder www.domain.de ab.

Hast du schon mal $_SERVER['HTTP_HOST'] zum Vergleichen genutzt?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants