Seite 1 von 1

xy.tld/blog/date/2008-10-03 -> xyz.de/blog/?date=208-10-0

Verfasst: 20.10.2008 11:40
von BiOG
hallo,

ich habe folgendes vor:

auf meiner seite gibt es ein selbstgeschriebenes blog.

die einträge können auf 4 verschiedene arten aufgerufen werden:

1. ohne parameter - zeigt die neusten 3 einträge an
example.com/blog/index.php
soll so bleiben ;)

2. übergabe der posting ID - zeigt nur diesen artikel an
example.com/blog/index.php?eintrag=123
soll werden zu example.com/blog/eintrag/123

3. übergabe eines datums - zeigt alle einträge dieses datums an
example.com/blog/index.php?datum=2008-10-09
soll werden zu example.com/blog/datum/2008-10-09

4. übergabe einer überschrift, zeigt den artikel mit dieser überschrift an
example.com/blog/index.php?titel=mod_rewrite ist toll!
soll werden zu example.com/blog/title/mod_rewrite ist toll!

oder kurz: aus
/blog/index.php?parameter=wert
soll werden
/blog/parameter/wert

optional gibt es noch die parameter "&seite=1" zum "blättern" und den anchor "#kommentare" um direkt zu den kommentaren zu springen.
also kann es durchaus auch einen aufruf ala
example.com/blog/index.php?datum=2008-10-09&seite=3
ODER
example.com/blog/index.php?eintrag=123#kommentare
oder, weil nur eins von beiden geht, wenn mehrere einträge angezeigt werden (könnten), wie beim datum, werden eh keine kommentare angezeigt.
die sieht man nur (und kann sie anspringen) wenn man gezielt einen beitrag aufruft (also über ID oder Titel)

die styles liegen im verzeichniss /css, bilder unter /images, javascript unter /js und es gibt noch einige ordner die nicht vom rewriting erfasst werden sollen (rewrite soll *nur* im "blog" ordner erfolgen)

ja, ich glaube das beschreibt was ich erreichen möchte recht vollständig, wenn ihr noch weitere infos braucht, sagt bescheid ;)

schonmal tausend dank im vorraus!

Verfasst: 20.10.2008 14:12
von Gumbo
Folgendes sollte funktionieren:

Code: Alles auswählen

RewriteRule ^blog/(eintrag|datum|title)/([^/]+)$ /blog/index.php?$1=$2 [L,QSA]

Verfasst: 20.10.2008 14:34
von BiOG
hallo,
danke für die schnelle antwort!

aber wenn ich /blog/datum/2008-10-10 (da gibts nen eintrag) aufrufe bekomme ich nen 404...

das rewrite logfile sagt mir folgendes:

192.168.123.199 - - [20/Oct/2008:15:29:18 +0200] [192.168.123.210/sid#85abe0][rid#5e42d38/initial] (2) init rewrite engine with requested uri /blog/datum/2008-10-10
192.168.123.199 - - [20/Oct/2008:15:29:18 +0200] [192.168.123.210/sid#85abe0][rid#5e42d38/initial] (3) applying pattern '^blog/(eintrag|datum|titel)/([^/]+)$' to uri '/blog/datum/2008-10-10'
192.168.123.199 - - [20/Oct/2008:15:29:18 +0200] [192.168.123.210/sid#85abe0][rid#5e42d38/initial] (1) pass through /blog/datum/2008-10-10


ich lese daraus das der reguläre ausdruck passt, aber die unveränderte url weitergegeben wird, oder?!

Verfasst: 21.10.2008 08:51
von Gumbo
Im Kontext der Serverkonfiguration muss dem Suchmuster ein Schrägstrich vorangestellt werden (vgl. URI beim Vergleich mit Suchmuster).

Verfasst: 21.10.2008 11:24
von BiOG
Gumbo hat geschrieben:Im Kontext der Serverkonfiguration muss dem Suchmuster ein Schrägstrich vorangestellt werden (vgl. URI beim Vergleich mit Suchmuster).


hi, nochmals danke!

mit vorrangestelltem / klappt die umleitung aaaaaber, das gute alte problem mit dem einbinden von bildern, styles und javascript plagt mich jetzt wieder :roll:

hier mein jetziges regelwerk:

Code: Alles auswählen

        RewriteEngine On

        RewriteLog /var/log/rewrite.log
        RewriteLogLevel 3

        # verzeichnisse ausschliessen
        RewriteRule ^/css/ -[L]
        RewriteRule ^/images/ -[L]   
        RewriteRule ^/js/ -[L]
        RewriteRule ^/yaml/ -[L]

        # blog parsen auf "eintrag", "datum" und "titel"
        RewriteRule ^/blog/(eintrag|datum|titel)/([^/]+)$ /blog/index.php?$1=$2 [L,QSA]


damit kann ich nun blogeinträge z.b. mit example.tld/blog/datum/2008-10-07 aufrufen - wunderbar, aber halt ohne styles und grafiken

ein setzen der base url im header hat auch nichts gebracht

Code: Alles auswählen

<base href="http://example.tld">


und es ist auch anscheinend egal wie ich bilder einbinde

Code: Alles auswählen

<img src="/images/bild.png" />
<img src="../images/bild.png" />

beides wird nicht angezeigt...

die "eigenschaften" dieser nicht eingebundenen bilder zeigen aber beide das gleiche an!

Code: Alles auswählen

Location: http://example.tld/images/bild.png


bin da jetz grade ratlos und das bin ich nicht gerne ;)

achja, hier nochmal die log datei (gekürzt)

Code: Alles auswählen

192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#6285b58/initial] (2) init rewrite engine with requested uri /blog/datum/2008-10-14
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#6285b58/initial] (3) applying pattern '^/css/' to uri '/blog/datum/2008-10-14'
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#6285b58/initial] (3) applying pattern '^/images/' to uri '/blog/datum/2008-10-14'
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#6285b58/initial] (3) applying pattern '^/js/' to uri '/blog/datum/2008-10-14'
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#6285b58/initial] (3) applying pattern '^/yaml/' to uri '/blog/datum/2008-10-14'
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#6285b58/initial] (3) applying pattern '^/blog/(eintrag|datum|titel)/([^/]+)$' to uri '/blog/datum/2008-10-14'
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#6285b58/initial] (2) rewrite '/blog/datum/2008-10-14' -> '/blog/index.php?datum=2008-10-14'
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#6285b58/initial] (3) split uri=/blog/index.php?datum=2008-10-14 -> uri=/blog/index.php, args=datum=2008-10-14
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#6285b58/initial] (2) local path result: /blog/index.php
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#6285b58/initial] (2) prefixed with document_root to /web/example.tld/public_html/blog/index.php
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#6285b58/initial] (1) go-ahead with /web/example.tld/public_html/blog/index.php [OK]

^^^hier wird das muster der blogeinträge erkannt und richtig umgeschrieben - super

Code: Alles auswählen

192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#6289b78/initial] (2) init rewrite engine with requested uri /css/layout_3col_gfxborder.css
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#6289b78/initial] (3) applying pattern '^/css/' to uri '/css/layout_3col_gfxborder.css'
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#6289b78/initial] (2) rewrite '/css/layout_3col_gfxborder.css' -> '-[L]'
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#6289b78/initial] (3) applying pattern '^/js/' to uri '-[L]'
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#6289b78/initial] (3) applying pattern '^/yaml/' to uri '-[L]'
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#6289b78/initial] (3) applying pattern '^/blog/(eintrag|datum|titel)/([^/]+)$' to uri '-[L]'
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#6289b78/initial] (2) local path result: -[L]

^^^hier wird auf auf eins der css files getestet, es wird erkannt das /css nicht bearbeitet werden soll und das ganze ignoriert -[L]

Code: Alles auswählen

192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#62e9bd8/initial] (2) init rewrite engine with requested uri /images/eyecandy/frameS/6.png
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#62e9bd8/initial] (3) applying pattern '^/css/' to uri '/images/eyecandy/frameS/6.png'
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#62e9bd8/initial] (3) applying pattern '^/images/' to uri '/images/eyecandy/frameS/6.png'
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#62e9bd8/initial] (2) rewrite '/images/eyecandy/frameS/6.png' -> '-[L]'
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#62e9bd8/initial] (3) applying pattern '^/js/' to uri '-[L]'
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#62e9bd8/initial] (3) applying pattern '^/yaml/' to uri '-[L]'
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#62e9bd8/initial] (3) applying pattern '^/blog/(eintrag|datum|titel)/([^/]+)$' to uri '-[L]'
192.168.123.199 - - [21/Oct/2008:12:08:25 +0200] [192.168.123.210/sid#6ba820][rid#62e9bd8/initial] (2) local path result: -[L]

^^^hier wird auf auf eins der bilder getestet, es wird erkannt das /images nicht bearbeitet werden soll und das ganze ignoriert -[L]

oder interpretiere ich das log falsch?

Verfasst: 21.10.2008 17:17
von Gumbo
Zwischen Ersatz-Ausdruck und Flags müssen Lerraumzeichen stehen.

Verfasst: 22.10.2008 09:04
von BiOG
Gumbo hat geschrieben:Zwischen Ersatz-Ausdruck und Flags müssen Lerraumzeichen stehen.


jau! das isses!!!

oh man, da wär ich nie drauf gekommen... ich hab an allen möglichen parametern geschraubt, nur das hab ich nich gesehen...

und zum dritten mal: tausend dank! :!: :D