Zur Navigation

Zugriff auf Datei ohne php-Endung [3]

21 christa

@ christa

D.h. du gibst die dynamische URL im Browser ein? das mod_rewrite sorgt lediglich für die serverinterne Rückübersetzung statischer in dynamische URLs. D.h. du musst die statische URL in die Adresszeile des Browsers eingeben.

hmm... ich möchte aber die dynamische umwandeln in eine statische. Im Moment gibt es nur dynamische und diese sollen verschwinden. Habe ich mich falsch ausgedrückt?

22.03.2013 18:30

22 Horst_M

Zitat von Jörg
Mit dem Slash am Anfang wird vermutlich weitergeleitet, d.h. die URL ändert sich von der statischen auf die dynamische URL.

Das hat mich nun doch etwas überrascht, weil ich bisher nur alles mit / Slash am Anfang schrieb. Es wird nicht weitergeleitet wie bei einer richtigen Weiterleitung, es wird auch nur ausgelöst, doch mit / sucht der Apache dann wohl nach dem kompletten Pfad ab Root von der auszulösenden Datei.

Ein Testverzeichnis /test mit 3 Testdateien

angebote1.php
angebote2.php
angebote3.php

angelegt, nach dem Muster:

<!DOCTYPE html>
<html>

<head>
<title>Testangebote 1</title>
</head>

<body>
<div style="text-align:center">
<h1>Testangebote 1</h1>

<?php
echo $_GET["kat"]."<br>";
echo $_GET["page"]."<br>";
?>
</div>
</body>
</html>

Die htaccess mit im Verzeichnis /test abgelegt und durch Auskommentieren jeweils nur eine Regel aktiviert. Zwischen zwei Tests jeweils den Cache gelöscht.

RewriteEngine On

#RewriteRule ^angebote/(.+)/([0-9]+)$  angebote1.php?kat=$1&page=$2 [L]        # funktioniert
#RewriteRule ^angebote/(.+)/([0-9]+)$ /angebote2.php?kat=$1&page=$2 [L]        # Objekt nicht gefunden!
#RewriteRule ^angebote/(.+)/([0-9]+)$ /test/angebote3.php?kat=$1&page=$2 [L]   # funktioniert

Dann probiert, welche der drei Regel funktioniert, wenn ich

http://localhost/test/angebote/informationen/139

aufrufe. Das Ergebnis entspricht den Kommentaren in der htaccess. Würde die htaccess und die Datei nun nicht in einem Verzeichnis liegen, sondern im Root, sollte es praktisch nicht einmal eine Rolle spielen, ob mit oder ohne Slash, was ich bisher aber noch nie ohne / getestet habe.

Nun zur Frage von christa.

Zitat von christa
Resultat: keine Umsetzung, keine Fehlermeldung, url bleibt als dynamische bestehen.

Du hast das /Verzeichnis/ und angebote/ im Pfad der Verweise zu stehen? Sonst findet der Apache das Verzeichnis mit den Dateien und der htaccess nicht. Irgendwie vermisse ich eine von beiden Angabe in Deinen Beispielen. Der aufzurufende Verweis

xyz.tdl/verzeichnis/immunitaet/139

müsste nach Deinen Beispielen (zumindest das letzte mit der htaccess), eigentlich so aussehen

xyz.tdl/verzeichnis/angebote/immunitaet/139

oder ich habe schon wieder einen Denkfehler. Doch so wie ich das verstehe, so müsste der Apache eigentlich schon zuerst das /verzeichnis/ im aufgerufenen Verweis bzw. in der aufgerufenen URI finden und in diesem /verzeichnis/ die htaccess, bevor in der Regel dann ein Musterabgleich stattfinden kann, ob angebote/ in der aufgerufenen URI bzw. im Verweis enthalten ist.

22.03.2013 18:32 | geändert: 22.03.2013 18:59

23 Jörg

Zitat von christa
@ christa

D.h. du gibst die dynamische URL im Browser ein? das mod_rewrite sorgt lediglich für die serverinterne Rückübersetzung statischer in dynamische URLs. D.h. du musst die statische URL in die Adresszeile des Browsers eingeben.

hmm... ich möchte aber die dynamische umwandeln in eine statische. Im Moment gibt es nur dynamische und diese sollen verschwinden. Habe ich mich falsch ausgedrückt?

Nein. Das mod_rewrite sorgt dafür, dass unter den statischen URLs der Inhalt der dynamischen URLs angezeigt wird. Dann kann in einem zweiten Schritt das CMS angepasst werden, so dass die Links auf die statischen URLs zeigen.

Es ist ein häufige Missverständnis, dass das Erstellen von suchmaschinenfreundlichen URLs nur per mod_rewrite zu erledigen ist. Das Umschreiben der URLs ist nur die Voraussetzung dafür, dass die statischen URLs "funktionieren". Dazu musst du sie aber auch im Browser aufrufen, bzw. entsprechend verlinken.

Man kann auch von den alten dynamischenauf dei neuen URLs weiterleiten. Das würe ich aber nur als zusätzlichen, dritten Schritt sehen. Auf die Verlinkung der statischen URLs zu verzichten würde bedeuten, dass man dauerhaft doppelten Traffic verursacht

22.03.2013 19:38

24 christa

@Horst_M

danke für Deine Mühe mit den Tests. Aber irgendwie sprechen wir nicht vom Gleichen. Ich möchte meine dynamischen urls in statische umwandeln. Gebe ich die jetzigen dyn.-urls ein sollen diese in "leserliche" umgewandelt werden, so wie unter Beitrag 13 beschrieben:

also hier nochmals meine Vorstellung:

xyz.tdl/verzeichnis/angebote.php?kat=viren
(müsste eigentlich kat=viren&page=1 heißen aber heißt nur kat=viren)
soll zu xyz.tdl/verzeichnis/angebote/viren/1 werden

xyz.tdl/verzeichnis/angebote.php?kat=viren&page=2
soll zu xyz.tdl/verzeichnis/angebote/viren/2 werden

xyz.tdl/verzeichnis/information.php?ID=neutrum
soll zu xyz.tdl/verzeichnis/informationen/neutrum werden

xyz.tdl/verzeichnis/immunitaet.php?ID=139
soll zu xyz.tdl/verzeichnis/immunitaet/139 werden

lG
Christa

22.03.2013 19:44

25 Jörg

@Horst_M

du hast recht :)

Ich hatte den führenden Slash bislang gemieden. Dass er eine Weiterleitung bewirkt, habe ich wohl aus irgendeinem anderen Bereich übertragen (ich weiß aber nicht mehr aus welchem)

22.03.2013 19:53 | geändert: 22.03.2013 19:55

26 Horst_M

Zitat von christa
Aber irgendwie sprechen wir nicht vom Gleichen. Ich möchte meine dynamischen urls in statische umwandeln.

Du meinst URL Rewriting, welches nicht nur in einer Richtung wirkt, doch derartige Regeln sind etwas komplexer und bestehen mindestens aus 3 Zeilen. Im Prinzip findet zuerst in einer Richtung eine 301 Weiterleitung auf eine saubere URI statt und nur in der zweiten Richtung das eigentliche URL Rewriting. Lese Dir das mal durch, die unteren 3 Beispiele sollten Deinen Vorstellungen entsprechen: URL-Rewriting

Was aber nichts daran ändert, dass Du die Scripts dennoch umschreiben müsstest, da die Verweise im Quelltext nun einmal nicht durch eine htaccess umgeschrieben werden und die Bots somit nur Verweise finden würden, die in Weiterleitungen münden.

Edit: Das funktioniert bei mir unter den gegebenen Testbedingungen. Also die angebote3.php und die htaccess liegt im Verzeichnis test.

aus: http://localhost/test/angebote3.php?kat=informationen&page=139
wird: http://localhost/test/angebote/informationen/139

RewriteEngine On

RewriteCond %{QUERY_STRING} ^kat=(.+)&page=([0-9]+)$
RewriteRule ^angebote3\.php$ /test/angebote/%1/%2? [L,R=301]
RewriteRule ^angebote/(.+)/([0-9]+)$ /test/angebote3.php?kat=$1&page=$2&nur=so [QSA,L]

Wie das nun mit Deinen eigentlich so und doch nicht so Parameter-Werte-Paaren klappt, weiß ich jetzt nicht.

22.03.2013 20:07 | geändert: 22.03.2013 20:44

27 Horst_M

Bekomme das ohne page=1 und mit ab page=2 nur über Ausschluss von &= hin.

aus: http://localhost/test/angebote.php?kat=informationen
wird: http://localhost/test/angebote/informationen/1

aus: http://localhost/test/angebote.php?kat=informationen&page=139
wird: http://localhost/test/angebote/informationen/139

RewriteEngine On

RewriteCond %{QUERY_STRING} ^kat=([^&=]+)$
RewriteRule ^angebote\.php$ /test/angebote/%1/1? [L,R=301]
RewriteRule ^angebote/(.+)/1$ /test/angebote.php?kat=$1&nur=so [QSA,L]

RewriteCond %{QUERY_STRING} ^kat=(.+)&page=([0-9]+)$
RewriteRule ^angebote\.php$ /test/angebote/%1/%2? [L,R=301]
RewriteRule ^angebote/(.+)/([0-9]+)$ /test/angebote.php?kat=$1&page=$2&nur=so [QSA,L]

Wichtig wäre in jedem Fall, dass Du zusätzlich zumindest die Menüs anpasst, auch "Blätterfunktionen" usw..

22.03.2013 22:12

28 christa

@Jörg


Es ist ein häufige Missverständnis, dass das Erstellen von suchmaschinenfreundlichen URLs nur per mod_rewrite zu erledigen ist. Das Umschreiben der URLs ist nur die Voraussetzung dafür, dass die statischen URLs "funktionieren". Dazu musst du sie aber auch im Browser aufrufen, bzw. entsprechend verlinken.

stimmt, dieser Meinung war ich bis dato

Man kann auch von den alten dynamischen auf dei neuen URLs weiterleiten. Das würe ich aber nur als zusätzlichen, dritten Schritt sehen. Auf die Verlinkung der statischen URLs zu verzichten würde bedeuten, dass man dauerhaft doppelten Traffic verursacht

ja, ich muss zusätzlich, wie weiter oben erwähnt, die alten, im Moment aber noch aktuellen dyn. URLs (aktuelle Webseite) auf die neuen noch gesperrten URLs (neue Webseite) weiterleiten. Ob ich dann auf die neuen statischen oder die dynamischen URLs weiterleite weiß ich noch nicht. Dies wird aber eine gesonderte Anfrage werden. Bin etwas verunsichert ob Du dies ansprichst oder mit "alten dynamischen" und "neuen URLs" von der URL-Umschreibung von dynamisch in statisch sprichst, also von dem was Horst_M weiter unten als Lösung vorschlägt?

23.03.2013 07:05

29 christa

@Horst_M
Zitat von Horst_M

aus: http://localhost/test/angebote.php?kat=informationen
wird: http://localhost/test/angebote/informationen/1

aus: http://localhost/test/angebote.php?kat=informationen&page=139
wird: http://localhost/test/angebote/informationen/139

RewriteEngine On

RewriteCond %{QUERY_STRING} ^kat=([^&=]+)$
RewriteRule ^angebote\.php$ /test/angebote/%1/1? [L,R=301]
RewriteRule ^angebote/(.+)/1$ /test/angebote.php?kat=$1&nur=so [QSA,L]

RewriteCond %{QUERY_STRING} ^kat=(.+)&page=([0-9]+)$
RewriteRule ^angebote\.php$ /test/angebote/%1/%2? [L,R=301]
RewriteRule ^angebote/(.+)/([0-9]+)$ /test/angebote.php?kat=$1&page=$2&nur=so [QSA,L]

Hallo Horst
Dein Rezept funktioniert einwandfrei, wunderbar Horst danke Dir. Ich sehe allerdings mit diesem Zeichensalat nicht wirklich durch. Deshalb mein scheuer Wunsch nach Hilfe bei der Umsetzung der übrigen beiden Ausdrücke, die ja von Deiner Lösung doch etwas abweichen.

aus xyz.tdl/verzeichnis/information.php?ID=neutrum
soll xyz.tdl/verzeichnis/informationen/neutrum werden

aus xyz.tdl/verzeichnis/immunitaet.php?ID=139
soll xyz.tdl/verzeichnis/immunitaet/139 werden
wobei "ID=..." natürlich eine fortlaufende Nummer ist

Möchte einfach nichts falsch machen.


23.03.2013 07:44

30 Jörg

Zitat von christa
Bin etwas verunsichert ob Du dies ansprichst oder mit "alten dynamischen" und "neuen URLs" von der URL-Umschreibung von dynamisch in statisch sprichst, also von dem was Horst_M weiter unten als Lösung vorschlägt?

Ja, Horst_M hat die Umschreibung der statischen in die dynamische und die Weiterleitung der dynamischen URL in jeweils einen Regelblock zusammengefasst.

Ich hatte das hier auch schon mal behandelt:

http://notizen.joergkrusesweb.de/n-2009-10/rewrite-redirect.html

Das alleine macht die Seiten aber nicht suchmaschinenfreundlicher. Im Gegenteil kann es zu einer Abwertung der Seite kommen, da Google auch die Ladegeschwindigkeit bewertet. Wenn der Bot immer über eine Weiterleitung gehen muss, kann sich das nachteilig auswirken. Also solltest du auch die Links in dem CMS so anpassen, dass diese direkt auf die statischen Seiten verweisen.

23.03.2013 07:46 | geändert: 23.03.2013 07:47