Mod Rewrite sinnvoll nutzen
Mario
- php
Hallo,
ich habe ein Link der folgendermassen aussieht:
index.php?level0=5&level1=2, wobei level0 für die die Hauptebene in der Navigation steht und level1 für die Subnavi.
Das ist nicht sehr suchmaschinenfreundlich, deshalb würde ich gerne einen solchen Link erhalten.
/downloads/images.html
Wie gehe ich da vor? Kann ich dann überhaupt keine Integerwerte mehr als ID verwenden? Mir sind die Zusammenhänge zwischen PHP und Mod Rewrite noch nicht ganz klar...
Weiterhin gibt es die Lokalisierung. Super wäre folgendes:
/downloads/images.html (englisch)
/downloads/bilder.html (deutsch)
Ist sowas zu machen? 'images' bzw 'bilder' representiert ja eine ID, welche wie der Name sagt eindeutig ist. Das wäre dann doch nicht mehr der Fall?
Vielen Dank für eure Antworten!
hi,
ich habe ein Link der folgendermassen aussieht:
index.php?level0=5&level1=2, wobei level0 für die die Hauptebene in der Navigation steht und level1 für die Subnavi.
Das ist nicht sehr suchmaschinenfreundlich,
Es ist nicht sehr nutzerfreundlich - sowas kann sich kein Mensch merken, insb. wenn es sich um mehrere solcher Adressen handelt.
Denke bitte an Menschen zuerst, nicht an Suchmaschinen.
deshalb würde ich gerne einen solchen Link erhalten.
/downloads/images.html
Wie gehe ich da vor? Kann ich dann überhaupt keine Integerwerte mehr als ID verwenden?
Du musst irgendwo den Schlüsselwert "images" wieder in deinen nummerische ID umwandeln, wenn du letztere brauchst.
Ob du sie allerdings noch brauchst, wäre eine andere Frage.
Wenn dein PHP-Script derzeit mit
if($uebergebeneID == 10) { ... }
abprüft - dann könnte es doch genauso gut mittels
if($uebergebenerKey == "images") { ... }
eine bestimmte Aktion auslösen.
Mir sind die Zusammenhänge zwischen PHP und Mod Rewrite noch nicht ganz klar...
Es gibt keinen.
mod_rewrite arbeitet server-intern beim "Analysieren" der Anfrage-Adresse - noch bevor dein PHP-Script überhaupt zum Zuge kommt.
Weiterhin gibt es die Lokalisierung. Super wäre folgendes:
/downloads/images.html (englisch)
/downloads/bilder.html (deutsch)Ist sowas zu machen? 'images' bzw 'bilder' representiert ja eine ID, welche wie der Name sagt eindeutig ist. Das wäre dann doch nicht mehr der Fall?
Du kannst einer ID doch gerne mehrere Schlüsselworte zuordnen ...
Du könntest das so in einem Array ablegen:
$xyz = array(
10 => array('bilder', 'images'),
20 => array(...)
);
Oder du könntest auch sowas nutzen,
$xyz = array(
'bilder' => 10,
'images' => 10,
'...' => 20,
...
);
Die Entscheidung, ob jetzt die englische oder deutsche Sprachversion gefragt ist, musst du in beiden Fällen natürlich noch zusätzlich irgendwie treffen.
gruß,
wahsaga
Hello,
Mir sind die Zusammenhänge zwischen PHP und Mod Rewrite noch nicht ganz klar...
Es gibt keinen.
Das stimmt nicht für beide Richtungen.
Beim Request regelt es der Server.
Um aber einen Request per Klick aufbauen zu können, muss erstmal ein Angebot gemacht werden vom Server. Und da muss es dann das CMS (also hier PHP) regeln, aus der bisher kryptischen Schreibweise
index.php?level0=5&level1=2
ein lesbares
/downloads/images.html
zu machen. Wenn sich aus dem Gesichtspunkt der Datenhaltung ebne ein "level0=5&level1=2" ergibt, dann muss es eine Funktion geben, die weiß, was sie daraus zu machen hat, bevor der Link "printed" wird.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Danke! Ein grundsätzliches Verständnisproblem noch...
Mir sind die Zusammenhänge zwischen PHP und Mod Rewrite noch nicht ganz klar...
Es gibt keinen.
Ich will von einer auf die andere Seite verlinken. Was definiere ich den link?
....../index.php?level0=5&level1=2
oder
....../downloads/images.html
?
Mod Rewrite müsste mir doch das erstere in das zweitere umwandeln können!?
Kann ich dann wieder auf der nächsten Seite mit $_GET['level0'] zugreifen?
Für eine kurze Ablaufsbeschreibung wäre ich dankbar! :)
Hello,
Ich will von einer auf die andere Seite verlinken. Was definiere ich den link?
....../index.php?level0=5&level1=2
oder
....../downloads/images.html
?Mod Rewrite müsste mir doch das erstere in das zweitere umwandeln können!?
Kann ich dann wieder auf der nächsten Seite mit $_GET['level0'] zugreifen?
Das wird Dir der Server auch nicht 1:1 umrechnen, sondern er wird Deinem PHP-Script z.B. die beiden Parameter
$_param[1] = 'downloads' und
$_param[2] = 'images.html'
übergeben und Dein Script wäre dann an der Reihe, über eine möglichst geschickte Abfrage Deiner Datenbank entweder direkt auf die Bestandteile für den Zusammenbau der Ressource zu schließen, oder aber daraus mittels einer Zwischenabfrage (oder im einfachsten Falle Funktion) wieder die kryptischen Abfragebedingungen zu erzeugen.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Ich will von einer auf die andere Seite verlinken. Was definiere ich den link?
....../index.php?level0=5&level1=2
oder
....../downloads/images.html
?Mod Rewrite müsste mir doch das erstere in das zweitere umwandeln können!?
Kann ich dann wieder auf der nächsten Seite mit $_GET['level0'] zugreifen?
Das wird Dir der Server auch nicht 1:1 umrechnen, sondern er wird Deinem PHP-Script z.B. die beiden Parameter
$_param[1] = 'downloads' und
$_param[2] = 'images.html'übergeben und Dein Script wäre dann an der Reihe, über eine möglichst geschickte Abfrage Deiner Datenbank entweder direkt auf die Bestandteile für den Zusammenbau der Ressource zu schließen, oder aber daraus mittels einer Zwischenabfrage (oder im einfachsten Falle Funktion) wieder die kryptischen Abfragebedingungen zu erzeugen.
D.h. die Paramter sind weder in der URL sichtbar, noch kann PHP anschließend darauf zugreifen? Mein Script müsste folgendes enthalten:
if($_param[1] == 'downloads') $_REQUEST['level0'] = 5; // das ist nicht elegant, es geht hier nur um das Verständis.
?
hi,
Ich will von einer auf die andere Seite verlinken. Was definiere ich den link?
....../index.php?level0=5&level1=2
oder
....../downloads/images.html
?
Welche Art von Links willst du denn haben?
Du hast den Thread doch eröffnet, weil du eine bestimmte Art haben wolltest ...
Mod Rewrite müsste mir doch das erstere in das zweitere umwandeln können!?
mod_rewrite arbeitet in genau eine "Richtung" - auf dem eingehenden Request.
Wie Tom schon sagte, die Links erst mal in der "schönen" Form ins HTML zu generieren, ist aber die Aufgabe deines Scriptes.
gruß,
wahsaga
Ich will von einer auf die andere Seite verlinken. Was definiere ich den link?
....../index.php?level0=5&level1=2
oder
....../downloads/images.html
?Welche Art von Links willst du denn haben?
Du hast den Thread doch eröffnet, weil du eine bestimmte Art haben wolltest ...
1. ok, verlinken will ich so: 'index.php?level0=5&level1=2'.
2. dann kommt apache / mod_rewrite mit der entsprechenden access datei und und ändert es im Idealfall folgendermassen: '/downloads/images.html'.
3. Das geht schon mal gar nicht, da apache nicht weiss, dass 5 = download entspricht. Also müsste ich folgendes schreiben: 'index.php?level0=download&level1=images'.
4. Auf $_REQUEST kann ich dann nicht mehr zugreifen, das muss ich anders lösen.
Ist das alles soweit korrekt?
hi,
- ok, verlinken will ich so: 'index.php?level0=5&level1=2'.
Nein, willst du nicht.
- dann kommt apache / mod_rewrite mit der entsprechenden access datei und und ändert es im Idealfall folgendermassen: '/downloads/images.html'.
Nein.
Du verlinkst in deinem HTML auf '/downloads/images.htm'.
Diese Adresse fordert der Browser jetzt vom Server an.
mod_rewrite schreitet _jetzt_ ein, macht daraus etwas in der Form script.php?foo=bar&blah=blubb.
Jetzt kann dein Script script.php diese per GET übergebenen Parameter auf dem üblichen Weg auslesen und auswerten.
- Das geht schon mal gar nicht, da apache nicht weiss, dass 5 = download entspricht. Also müsste ich folgendes schreiben: 'index.php?level0=download&level1=images'.
Ja.
Die Umsetzung der Schlüsselworte in nummerische IDs macht dann dein PHP-Script. (Wobei ich ja bereits angesprochen hatte, dass du überdenken sollst, ob diese nummerischen IDs dann überhaupt noch notwendig sind.)
- Auf $_REQUEST kann ich dann nicht mehr zugreifen, das muss ich anders lösen.
Nein.
gruß,
wahsaga