Kurze Frage zu Rewrite und Verzeichnissen

Alles, was den Apache betrifft, kann hier besprochen werden.

Kurze Frage zu Rewrite und Verzeichnissen

Postby martbert » 27. August 2022 14:23

Hallo,

ich habe eine hoffentlich einfache Frage.
Gerne möchte ich "freundliche URLs" haben.

Momentan habe ich ein Portal, welches aus mehreren Modulen besteht.
Die Module sind nach dem Schema aufgebaut:
Kunden:
- /module_customer/create.php
- /module_customer/show.php

Termine
- /module_dates/create.php
- /module_dates/show.php

Die Seiten selbst haben oft den selben Namen befinden sich nur in verschiedenen Verzeichnissen.
Ich habe die htaccess so angepasst:
Code: Select all
RewriteEngine on
RewriteRule ^user/([^/]+)/?$ user.php?id=$1 [L]
RewriteRule ^module_customer/create/?$ module_customer/create.php [L]
RewriteRule ^module_customer/show/?$ module_customer/show.php [L]
RewriteRule ^module_dates/create/?$ module_dates/create.php [L]
RewriteRule ^module_dates/show/?$ module_dates/show.php [L]


Nach diesem Schema müsste ich für alle Seiten und Module einen Eintrag in der htaccess anlegen. Das muss irgendwie einfacher gehen.
Also für module_customer bzw module_dates irgendwie eine Art Platzhalter in der htaccess.....
Habt ihr da eine Idee?
martbert
 
Posts: 4
Joined: 11. May 2020 14:53
XAMPP version: 1
Operating System: Linux

Re: Kurze Frage zu Rewrite und Verzeichnissen

Postby Nobbie » 27. August 2022 21:22

Die Lösung steht doch schon da, die RewriteRules beherrschen sog. Regular Expressions. Das ist zu 100% genau das, was Du suchst und mehr noch, ein vollkommen erklärendes Beispiel steht auch noch in der .htaccess. Die erste RewriteRule ist exakt das, was Du brauchst:

Code: Select all
RewriteRule ^user/([^/]+)/?$ user.php?id=$1 [L]


Hast Du nicht mal nachgedacht, was diese Zeile eigentlich macht? Die ersetzt alle URLs a la "user/irgendwer/" durch "user.php?id=irgendwer". Das ist schon fast exakt das, was Du brauchst. Nur eben nicht als "user.php?id=irgendwer", sondern in der Art "user/irgendwer.php". Das ist aber doch nur eine minimale Anpassung und schon bist Du fertig. Der Platzhalter heißt offensichtlich "$1" und sein Inhalt ist in diesem Fall der String "irgendwer". Jetzt musst Du nur noch $1 so benutzen, dass die URL Deiner Wahl herauskommt.
Nobbie
 
Posts: 13176
Joined: 09. March 2008 13:04

Re: Kurze Frage zu Rewrite und Verzeichnissen

Postby martbert » 28. August 2022 08:56

Danke für den Hinweis, leider kenne ich mich mit RegExp kaum aus.
Ich habe jetzt mehrere Stunden verbracht mit Testen und einlesen von RegExp, komme aber nicht weiter.

Ich habe es jetzt so versucht, klappt aber leider nicht, vielleicht kannst du mir noch nen Hinweis geben....

Code: Select all
RewriteRule ^([a-z_])/create/?$ $1/create.php [L]
martbert
 
Posts: 4
Joined: 11. May 2020 14:53
XAMPP version: 1
Operating System: Linux

Re: Kurze Frage zu Rewrite und Verzeichnissen

Postby Nobbie » 28. August 2022 09:55

Wieso nimmst Du nicht die Originalzeile, das war doch schon der entscheidende Hinweis? Du musst doch nur minimale Änderungen machen, an den Regular Expressions musst Du gar nichts ändern. Statt "user" steht bei Dir "module_costumer" und das war es auch schon. Und in $1 steht dann der Wert "create", oder "show" usw.

Und das ganze noch ein zweites Mal (also noch eine RewriteRule), da steht der ganze Krempel nochmal drin, nur dann statt "module_costumer" steht da " module_ dates".

Man könnte diese beiden Zeilen auch in in eine einzige Zeile packen, dann braucht man aber 2 Platzhalter, aber ich weiss von hier aus nicht, wieviele module es gibt. Wenn es nur zwei sind, kann man es so lassen mit zwei RewriteRules, wenn es mehrere sind, würde ich es zusammenpacken und mit 2 Platzhaltern arbeiten, $1 und $2. Das Pattern vorne ist zwei mal dasselbe und ist identisch mit dem Beispielpattern aus der 2. Zeile.
Nobbie
 
Posts: 13176
Joined: 09. March 2008 13:04

Re: Kurze Frage zu Rewrite und Verzeichnissen

Postby Nobbie » 28. August 2022 10:30

Was ich insgesamt nicht verstehe, wozu machst Du das überhaupt? Das sind doch schon "freundliche" URLs? Im Grunde gesehen hängst Du doch nur das .php an die URL dran, dann braucht der Anwender es nicht zu tun. Das hat aber mit "freundlichen" URLs nichts zu tun, eigentlich erkenne ich da gar keinen Sinn.

Die Idee der freundlichen URLs ist, dass heute viele Seiten mit einer einzigen zentralen Seite gesteuert werden und die Funktionen oder Module als Parameter mitgegeben werden. Die URLs sehen dann alle so aus:

index.php?module=customer&function=create

Usw.

Und das führt dazu, dass Suchmaschinen nur eine einzige Datei finden, wo scheinbar alles drin steht, nämlich index.php. Und dafür baut man die URLs so um wie sie bei Dir aber bereits sind, dass es so aussieht, als gäbe es die Datei modules_customer/create.php. Die .htaccess macht dann aus dieser Pseudo URL die richtige URL index.php?module=customer&function=create, was ja von aussen nicht zu sehen ist.

Aber genau das machst Du ja nicht, Du hast ja tatsächlich physikalisch schon diesen Aufbau. Deswegen sehe ich den Sinn nicht, wozu noch diese Rewrites?
Nobbie
 
Posts: 13176
Joined: 09. March 2008 13:04

Re: Kurze Frage zu Rewrite und Verzeichnissen

Postby Nobbie » 28. August 2022 14:24

Code: Select all
RewriteRule ^module_([^/]+)/([^/]+)/?$ module_$1/$2.php [L]


Ist eigentlich der Slash am Ende "/?" auch wirklich in der Eingabe URL? Man könnte es auch drastisch einfacher formulieren (den Slash gleich weglassen):

Code: Select all
RewriteRule ^(module_.*)$ $1.php [L]


In den mir bekannten Regular Expressions gibt es außerdem noch die Backreference (Platzhalter) für das komplette Suchergebnis, das ist das &-Zeichen. Keine Ahnung, ob die Rewrite Engine das beherrscht, dann bräuchte man auch noch die runden Klammern im zweiten Beispiel nicht:

Code: Select all
RewriteRule ^module_.*$ &.php [L]


Müßte ich mal ausprobieren, ob Apache das kann.

Jetzt bleibt aber immer noch die Frage: wozu das alles? Mit Suchmaschinen-freundlichen URLs hat das nichts zu tun.
Nobbie
 
Posts: 13176
Joined: 09. March 2008 13:04

Re: Kurze Frage zu Rewrite und Verzeichnissen

Postby martbert » 28. August 2022 17:04

Hm, ja du hast schon recht. Ich hinterfrage den Grund gerade selbst ein wenig.
Also, es ist ein Portal mit aktuell 8 Modulen, und ein bekannter der die Software für eine ähnliche Software entwickelt meinte das es so "besser aussieht".

Er hat schon recht, ich finde example.com/module_customer/show/2245/ auch hübscher wie example.com/module_customer/show.php?id=2245
Hab mich da wohl hinreissen lassen.
martbert
 
Posts: 4
Joined: 11. May 2020 14:53
XAMPP version: 1
Operating System: Linux

Re: Kurze Frage zu Rewrite und Verzeichnissen

Postby Nobbie » 28. August 2022 17:45

Dein jetztiges Beispiel hat aber Nullkommanull mit dem gemeinsam, was Du oben gefragt hast?! JETZT hast Du tatsächlich eine URL, wo ein Parameter angegeben wird (example.com/module_customer/show.php?id=2245) - da wiederum ist das Konzept der suchmaschinenfreundlichen URL verständlich.

Oben ist davon aber rein gar nichts zu sehen. Da wird einfach nur .php irgendwo drangeklatscht, mehr geschieht da nicht. Es sind dort schon einzelne Dateien statt Parameter. Ich kann vor allem auch nicht erkennen, wie ist es denn jetzt programmiert?
Nobbie
 
Posts: 13176
Joined: 09. March 2008 13:04


Return to Apache

Who is online

Users browsing this forum: No registered users and 61 guests