Advanced ModRewrite und Weiterleitung an eigene Programme

Gesperrt
Da Maxl
Beiträge: 26
Registriert: Mo 4. Apr 2005, 12:41
Wohnort: München
Kontaktdaten:

Advanced ModRewrite und Weiterleitung an eigene Programme

Beitrag von Da Maxl »

Hallo liebe Leute,

ich grüble über ein Problem mit Advanced ModRewrite und Weiterleitung an eigene Programme und finde keine Lösung dafür.

Zur Erklärung:

Ich habe eine Kategorie in der per Startseite eine Personenliste ausgegeben wird. Die Startseite hat ein einfaches Modul das ein externes Programm aufruft das eine Liste von Personen im HTML-Format für die Ausgabe zurückgibt. Das klappt soweit ganz gut.

Jeder Eintrag der Liste wird dabei mit einem Link versehen, über den eine Seite mit näheren Informationen zur Person aufgerufen werden kann. Das sieht dann z.B. so aus:

Code: Alles auswählen

www.meinedomain.tld/personen/person.html?id=33
Nun möchte ich aber erreichen, dass eine URL wie

Code: Alles auswählen

www.meinedomain.tld/personen/josef_huber
oder
www.meinedomain.tld/personen/josef_huber/index.html
genutzt werden kann, die anstatt id=33 ein id=josef_huber oder alles was nach .../personen kommt an das externe Programm weitergibt. Das externe Program sucht dann nach der Namenskombination anstatt der Id.

Ich habe einen Knoten in der Denke und komme in der Sache nicht weiter und hoffe, dass mir jemand weiterhelfen kann.

Vielen Dank!
xmurrix
Beiträge: 3215
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Re: Advanced ModRewrite und Weiterleitung an eigene Programme

Beitrag von xmurrix »

Hallo Da Maxl,

das AMR Plugin kann momentan nicht mit Parametern arbeiten, die der URL zusätzlich als Pfad angehängt werden. Unter der URL http://www.meinedomain.tld/personen/josef_huber würde das Plugin nach der Kategorie Personen -> Josef Huber oder dem einem Artikel suchen.

Du kannst das aber mit einer Regel in der .htaccess lösen. Das ist zwar hard codiert, also keine flexible Lösung, eine schnellere Möglichkeit fällt mir nicht ein.

Mit der Regel

Code: Alles auswählen

# personen/{name}/ umschreiben in personen/?id={name}
RewriteRule ^personen/([[_-0-9a-z]+)/$ /personen/?id=$1 [QSA,L]
in der .htaccess sollte z. B. die Anfrage "personen/josef_huber" auf personen/?id=josef_huber umschrieben werden. Erlaubt sind als Werte Unterstrich, Bindestrich, Zahlen und Buchstaben.

Im entsprechenden Modul kannst du es dann ganz regulär mit

Code: Alles auswählen

$personId = (isset($_GET['id'])) ? trim(strip_tags($_GET['id']))) ? '';
auslesen. Das trim u. strip_tags muss zwar nicht sein, da die Regel in der .htaccess schon einiges nicht durchlässt. Schaden tuts aber nicht, man weiß ja nie.

Das Generieren der URLs zu den Personen, z. B. in der Liste, hängt dann von den gesetzten AMR-Einstellungen ab. Werden z. B. URLs immer mit Artikelname.html generiert, wäre es hier sinnvoll, die URL selber auszugeben, z. B. mit:

Code: Alles auswählen

$personName = 'Josef Huber';
$urlPersonName = 'josef_huber';
$url = '/personen/' . $urlPersonName . '/';
echo '<a href="' . $url. '" title="Details zur Person">' . $personName . '</a>';
So ungefähr sollte es funktionieren, getestet habe ich den Code aber nicht.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
Gesperrt