Seite 1 von 1
Mod Rewrite frage
Verfasst: 08.11.2008, 11:31
von Michael1967
Ich möchte meine URLs mit Mod Rewrite umschreiben. Und zwar von .php in .html.
Nun habe ich ein Problem.
Url ist beispielsweise -
https://www.*******.de/page-24-titel.html
Diese lässt sich aber auch so aufrufen -
https://www.*******.de/page-24-titeltitel.html
Was läuft da falsch und wie lässt sich das unterbinden? Wie kann ich auf den korrekten Titel hin prüfen? Irgendwie zu hoch für mich

Verfasst:
von
SEO Consulting bei
ABAKUS Internet Marketing Erfahrung seit 2002
- persönliche Betreuung
- individuelle Beratung
- kompetente Umsetzung
Jetzt anfragen:
0511 / 300325-0.
Re: Mod Rewrite frage
Verfasst: 08.11.2008, 13:25
von Mork vom Ork
Michael1967 hat geschrieben:Ich möchte meine URLs mit Mod Rewrite umschreiben. Und zwar von .php in .html.
Was bedeutet das? Hast du Dateien, die auf .php enden, aber über eine .html-URL aufgerufen werden sollen? Hattest du .php-Dateien und hast sie durch .html-Dateien ersetzt?
Url ist beispielsweise -
https://www.*******.de/page-24-titel.html
Diese lässt sich aber auch so aufrufen -
https://www.*******.de/page-24-titeltitel.html
Was läuft da falsch und wie lässt sich das unterbinden?
Da hast du wohl das falsche Muster verwendet. Aber solange du die betreffende RewriteRule-Zeile nicht verrätst, wird dir niemand deinen Fehler nennen können.
Verfasst: 08.11.2008, 13:57
von Michael1967
Ich habe Dateien die auf PHP enden. Nun wird mit Mod Rewrite auf html-Dateien umgeschrieben.
Den Titel in der URL erzeuge ich direkt im Script und hänge diese an die URL (auch im Script).
Code: Alles auswählen
RewriteRule ^page-([0-9]+)-([[:punct:]/:\-\'(){}.&=_a-zA-Z0-9äöü\ ]*).html seite.php?id=$1&ttitle=$2 [L]
Also der Titel in der URL - https://www.*******.de/page-24-titel.html
wird im Script erzeugt und angehangen.
Der Link schaut im Script dann so aus -
<a href=\"seite.php?id=$id&ttitle=$my_title_without_special_chars\">
Im Titel werden noch Sonderzeichen umgewandelt, deswegen steht da $my_title_without_special_chars.
Verfasst: 08.11.2008, 15:19
von beni
Das Problem tritt bei vielen einmal auf, ich habe das gelöst, indem ich im betreffenden Script mit PHP geprüft hat, ob der inhalt von ich glaube es war basename($_SERVER['REQUEST_FILENAME']) mit meiner erwünschten URL übereinstimmt. Wenn nicht, gibts nen 301 auf die richtige Adresse.
Ob man wirklich REQUEST_FILENAME nehmen muss, bin ich mir gerade nicht sicher, lass dir einfach mit print_r($_SERVER) mal alle Variabeln aus diesem Array ausspucken und du wirst schon die richtige finden

Verfasst: 08.11.2008, 15:32
von Michael1967
Okay, vielen Dank für den Tipp. Werd das mal versuchen.
Wie Prüft man das denn? Sorry, schon da bin ich überfordert *gg*
Ein Beispiel würde reichen!

Verfasst: 08.11.2008, 21:24
von Mork vom Ork
Michael1967 hat geschrieben:Den Titel in der URL erzeuge ich direkt im Script und hänge diese an die URL (auch im Script).
Ach, so meinst du das. Das kannst du nicht mit mod_rewrite lösen, weil mod_rewrite nicht wissen kann, welche URLs existieren - es sei denn, du trägst jede URL einzeln in die .htaccess ein.
Du wirst den Titel bzw. den Parameter ttitle in deinem Skript seite.php überprüfen und, falls er nicht richtig ist, entsprechend reagieren müssen (die URL-Parameter findest du in $_GET, hier: $_GET["ttitle"]).
Verfasst: 08.11.2008, 23:16
von Michael1967
Ja, das mit dem $_GET["ttitle"]; stimmt. Aber wie prüfe ich jetzt das jetzt? Verstehe ich irgendwie nicht.
Hat vielleicht jemand ein Beispiel für mich?
Danke!
Könnte ich auch so auf die richtige Seite umleiten?
Code: Alles auswählen
if ($_GET["ttitle"] == "$title1") {
echo"mach nichts";
} else {
header("Location: page-$id-$titel.html ");
}
Oder würde das irgendwelche Probleme mit sich bringen?
Verfasst: 09.11.2008, 10:39
von Mork vom Ork
Michael1967 hat geschrieben:Hat vielleicht jemand ein Beispiel für mich?
Ja, du:
Code: Alles auswählen
if ($_GET["ttitle"] == "$title1") {
echo"mach nichts";
} else {
header("Location: page-$id-$titel.html ");
}
Wenn du das jetzt noch ein wenig sauberer schreibst und daran denkst, dass zu Location explizit ein Status gehören sollte und die Ziel-Adresse eine absolute URL sein muss, hast du, was du suchst:
Code: Alles auswählen
if ($_GET["ttitle"] != $richtigertitel) {
header("HTTP/1.0 301");
header("Location: http://example.com/page-" . $id . "-" . $richtigertitel . ".html");
}
Verfasst: 09.11.2008, 11:39
von Michael1967
Vielen Dank. Hast mir sehr geholfen

Verfasst: 09.11.2008, 14:38
von Michael1967
Sorry, aber das klappt so nicht. Ich habe Haupt- und Unterbereiche und er sperrt mir dann die Hauptbereiche.
Wie lässt sich Prüfen, ob der Titel aus der Url in der Datenbank vohanden ist?
Wenn da zum Beispiel jemand den Titel aus der Url ändert, soll der Aufruf der falschen URL blockiert werden. Geht sowas überhaupt?
Ich lese per Abfrage alle Title aus der Datenbank aus. Und wie geht es dann weiter?
Das mit der Prüfung auf Gleichheit fluppt nicht.

Verfasst: 09.11.2008, 16:58
von Mork vom Ork
Michael1967 hat geschrieben:Sorry, aber das klappt so nicht. Ich habe Haupt- und Unterbereiche und er sperrt mir dann die Hauptbereiche.
Ich sehe in deinen URLs momentan nur einen Bereich, der über die Seitennummer id gekennzeichnet ist. Mal ehrlich: Würdest du ohne Hintergrundwissen erkennen, dass „page-24-titel.html“ in Haupt- und Unterbereiche aufgeteilt wird?
Nimm's nicht persönlich, aber ich hatte dich eingangs schon darauf hingewiesen, dass du so gut wie keine Informationen lieferst, die eine ordentliche Beantwortung deiner Fragen ermöglichen. Deine Ausführungen sind so allgemein, da kann alles und jedes passen oder auch nicht. Du wirst dir schon etwas mehr Mühe geben müssen, wenn du nicht die ganze Energie potentieller Antwortender auf das Aus-der-Nase-ziehen verschwenden willst. Aber wie gesagt: Nicht bös' gemeint.
Wie lässt sich Prüfen, ob der Titel aus der Url in der Datenbank vohanden ist?
Mal vorausgesetzt, du erkennst die aufgerufene Seite über den Parameter id, dann liest du den zugehörigen Titel aus der Datenbank aus und vergleichst ihn mit dem Parameter ttitle. Der zweite Teil, der Vergleich, ist im obigen Code schon realisiert, es fehlt nur noch das Auslesen aus der Datenbank und die Zuweisung an $richtigertitel. Wie das Auslesen nun geht, steht in der PHP-Anleitung sowie jener deiner Datenbank - zur letzterer Kategorie gibt es ein halbes Dutzend Produkte, und dazu kommt noch die Frage, wie deine Datenbanktabellen aufgebaut sind.
Wenn da zum Beispiel jemand den Titel aus der Url ändert, soll der Aufruf der falschen URL blockiert werden. Geht sowas überhaupt?
Was meinst du mit „blockieren“? Du kannst statt der 301-Weiterleitung auch 404 ausgeben (und natürlich entsprechend auf Location verzichten), dann gibt es zu der URL keine Seite.
Verfasst: 09.11.2008, 20:15
von Michael1967
Okay, du hast recht. Sind wirklich zu wenig Informationen.
Die Datenbank (Spalten: cat, titel und parentid) sind so aufgebaut.
cat = Kategorie
titel = Titel der Kategorie
parentid = wird benötigt zum Auslesen der Hauptbereiche
Jeder Hauptbereich ist bei parentid mit einer "0" belegt.
Also ich lese den Titel der aufgerufenen Seite aus.
Code: Alles auswählen
$abfrage = "SELECT titel FROM tabelle where cat=".$_GET["cat"]."";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
echo $row->titel;
}
Nun vergleiche ich den Titel mit.
Code: Alles auswählen
if ($_GET["ttitle"] != $row->titel) {
echo "wenn Titel nicht gleich mach was , sonst weiter";
}
Das klappt auch schon bei den Unterbereichen. Nur leider bei den Hauptbereichen nicht. Das liegt doch mit Sicherheit daran, weil die Hauptbereiche zusätzlich mit parentid = 0 belegt sind. Irgendwie greift der Vergleich da nicht.
Verfasst: 10.11.2008, 18:12
von Michael1967
Hat sich erledigt - ich musste den Titel aus der Url mit $my_title_without_special_chars vergleichen, weil sonnst die Bindesriche im Titel fehlen. Dann kann es ja nicht klappen.
Vielen Dank es funktioniert ohne Probleme!
