Problem mit Modrewrite und internen Links im System

Wie wir alle wissen (sollten) ändert mod_rewrite keine Links im Script. Damit auch die Links auf Deiner Page auf die neuen "Rewrited URLs" zeigen bedarf es der Anpassung im Code. Fragen und Probleme rund um's Coding werden hier diskutiert.

Moderator: Super-Mod

Problem mit Modrewrite und internen Links im System

Beitragvon sono » 13.05.2006 15:03

Ich habe folgende Regeln :

Code: Alles auswählen
RewriteBase /

# Dynamisches umschreiben mit X Paramtetern Syntax /var-wert/
RewriteRule ^sys/?([^-]+)-([^-]+)/(.*)\index.html$ /sys$3index.html?$1=$2 [QSA,N]
RewriteRule ^sys/?\index.html$ /jndex.php [L]


Die Urls dazu sehen dann ca so aus :

http://meios/sys/area-Start/aktion-Star ... index.html

Das funktioniert ja alles soweit, aber das Problem kommt dann sobald ich einen Link klicke.
Da bekomme ich denk Link einfach angehängt das dann ca so aussieht :

http://meios/sys/area-Start/aktion-Star ... ssage.html
Dir Url wird also einfach angehängt , was so leider nicht funktioniert.

Wie kann ich das Problem lösen ohne jedesmal absolute Links verwenden zu müssen?

Gruß Sono
gähn ...
sono
.
.
 
Beiträge: 4
Registriert: 21.01.2006 23:53

Beitragvon Bob » 13.05.2006 16:13

Wenn du Ordnerstrukturen nutzt, musst du immer dementsprechend verlinken...

Sonst bleibt noch das
Code: Alles auswählen
<base href="....." />
Element im <head> der HTML-Seite.

Das N-Flag funktioniert hier jedoch nicht wirklich. Du löst jedes mal einen internal redirect aus, ein Splitting in PHP sollte man da ehr andenken, als z.B. 5 mal ein request-reprocessing zu starten.
Bob
Moderator
Moderator
 
Beiträge: 5044
Registriert: 01.10.2004 13:10

Beitragvon sono » 13.05.2006 20:04

Ok Danke für deine Antwort.

Ich denke mal dass ich dann die gefakte Ordnerstruktur durch Bindestriche ersetzen werde.

Ich kann mir zwar gerade nicht wirklich was unter "request-reprocessing" vorstellen aber wenn du sagst dass ich die Url lieber als Komplettstring in PHP verarbeiten sollte dann vertraue ich dir einfach mal.

Das fällt mir am Ende so oder so wesentlich leichter als diese kryptischen posix regex.

Gruß Sono
gähn ...
sono
.
.
 
Beiträge: 4
Registriert: 21.01.2006 23:53

Beitragvon Bob » 13.05.2006 22:08

in .htaccess-Dateien (bzw. allg. im per-dir context) findet nach dem eine Rewriterule angewand und eine Substitution vorgenommen worden ist, ein internal redirect auf den neuen URL-path statt. Ein solcher ist ansich nichts schlimmes, nun findet das ganze aber bei 4 name-value pairs in der URL das ganze gleich fünf mal statt, das ist dann nicht mehr so toll. Nach einem internal redirect geht das processing wieder zurück auf die uri-Ebene, div. Module und Direktiven werden durchlaufen, wie bei einem neuen Request eben. Wenn der Server im Ruhezustand (idyle) ist, wirst du da kaum was merken, unter Stress jedoch wohl schon.

Nichtdestotrotz ist PHP auf solche Stringzerlegungssachen ja ausgelegt, also einfach den Request an PHP weiterleiten und dort splitten.

Das mit dem N-Flag funktioniert hier übrigens wegen der virtuellen Ordner nicht (bekannter Bug, "path-info Problem").
Bob
Moderator
Moderator
 
Beiträge: 5044
Registriert: 01.10.2004 13:10

Beitragvon sono » 18.05.2006 17:46

Ich werde das ganze System demnächst so umstellen dass die Url in PHP selbst zerlegt wird. Das sollte kein größeres Problem darstellen.
Das mit den "Virtuellen Ordnerstrukturen" habe ich jetzt aufgegeben und trenne die Parameter durch "-" .

Damit hat sich dass dann auch eledigt.

Danke für deine Antwort,
Gruß Sono
gähn ...
sono
.
.
 
Beiträge: 4
Registriert: 21.01.2006 23:53


Zurück zu Programmierung & Scriptanpassung für mod_rewrite

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron