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

Eines der wichtigsten Anwendungsgebiete von mod_rewrite ist das umschreiben von dynamischen in statische URLs um "suchmaschinenfreundliche URLs" zu erzeugen. Aber was ist besser fürs Ranking? http://www.url.com/12_2.htm, http://www.url.com/url,12,2.htm oder doch lieber http://www.url.com/12/2/url/ Fragen zum URL-Design werden hier diskutiert.

Moderator: Super-Mod

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

Beitragvon BiOG » 20.10.2008 11:40

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!
BiOG
.
.
 
Beiträge: 6
Registriert: 11.06.2008 12:34

Beitragvon Gumbo » 20.10.2008 14:12

Folgendes sollte funktionieren:
Code: Alles auswählen
RewriteRule ^blog/(eintrag|datum|title)/([^/]+)$ /blog/index.php?$1=$2 [L,QSA]
Markus Wulftange
Gumbo
Moderator
Moderator
 
Beiträge: 5019
Registriert: 07.01.2005 01:18
Wohnort: Trier

Beitragvon BiOG » 20.10.2008 14:34

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?!
BiOG
.
.
 
Beiträge: 6
Registriert: 11.06.2008 12:34

Beitragvon Gumbo » 21.10.2008 08:51

Im Kontext der Serverkonfiguration muss dem Suchmuster ein Schrägstrich vorangestellt werden (vgl. URI beim Vergleich mit Suchmuster).
Markus Wulftange
Gumbo
Moderator
Moderator
 
Beiträge: 5019
Registriert: 07.01.2005 01:18
Wohnort: Trier

Beitragvon BiOG » 21.10.2008 11:24

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?
BiOG
.
.
 
Beiträge: 6
Registriert: 11.06.2008 12:34

Beitragvon Gumbo » 21.10.2008 17:17

Zwischen Ersatz-Ausdruck und Flags müssen Lerraumzeichen stehen.
Markus Wulftange
Gumbo
Moderator
Moderator
 
Beiträge: 5019
Registriert: 07.01.2005 01:18
Wohnort: Trier

Beitragvon BiOG » 22.10.2008 09:04

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
BiOG
.
.
 
Beiträge: 6
Registriert: 11.06.2008 12:34


Zurück zu URL-Design

Wer ist online?

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