Archiv verlassen und diese Seite im Standarddesign anzeigen : mod_rewrite regel funktioniert nicht
Hi Profis,
ich stehe mal wieder vor einem Problem:
Folgende beiden Regeln habe ich nach langem Lesen erstellt:
Regel 1 funktioniert
nun möchte ich aber in der Regel 2 die Unterkategorie aufnehmen,
was jedoch nicht klappt. Es kommt keine Fehlermeldung, die
2.te Kategorie wird auch korrekt in der Adresszeile angezeigt, nur
das Script wechselt nicht in die Unterkategorie:
RewriteRule ^([-a-zA-Z]+)\.html$ index.php?category=$1 [L]
RewriteRule ^([-a-zA-Z]+)\([-a-zA-Z]+)\.html$ index.php?category=$1 [L]
Eine Unterkategorie sieht so aus:
http://www.example.com/Auto-und-Motorrad/Autovermietungen.html
oder
http://www.example.de/Auto-und-Motorrad/Tuning-und-Restaurierung.html
Hat jemand eine Idee dazu?
Was ist an meiner Regel denn falsch?
Wenn du zwischen einem \ und einem / nicht unterscheiden kannst, solltest du dich an den Augenarzt oder Optiker deines Vertrauens wenden.
Hab ich schon proviert, Ergebnis bleibt gleich
das hier:
RewriteRule ^([-a-zA-Z]+)\.html$ index.php?category=$1&page=2 [L]
RewriteRule ^([-a-zA-Z]+)/([-a-zA-Z]+)\.html$ index.php?category=$1&page=2 [L]
funktioniert auch nicht. Auch keine Fehlermeldung :-(
Und was hat dein Debugging ergeben - Kontrollausgabe der übergebenen Parameter in der index.php mittels print_r($_GET)?
onemorenerd 05-07-2009, 16:57 Kein $2 ...?!
Kein $2 ...?!
doch, klar:
RewriteRule ^([-a-zA-Z]+)\.html$ index.php?category=$1&page=$2 [L]
RewriteRule ^([-a-zA-Z]+)/([-a-zA-Z]+)\.html$ index.php?category=$1&page=$2 [L]
Schön - schaffst du es vielleicht auch noch, die andere Rückfrage zu beantworten ...?
Ausgabe: Array ( [page] => Autovermietungen )
Kann bei den zuletzt gezeigten Regeln eigentlich gar nicht sein, da du da beide Male einen Parameter category drin stehen hattest - und der müsste darin auch auftauchen, selbst wenn ggf. der Wert fehlt.
Legt den Verdacht nahe, dass du uns immer noch nicht deine aktuellen Regeln gezeigt hast, mit denen du den Test durchgeführt hast - und sowas nervt! Es ist schwer möglich, jemandem weiterzuhelfen, wenn immer nur Informationsbruchstücke serviert werden, und die dann auch noch teilweise fehlerhaft sind.
Sorry,
aber genau so ist es:
Hier die aktuellen Regeln:
RewriteRule ^([-a-zA-Z]+)\.html$ index.php?category=$1&page=$2 [L]
RewriteRule ^([-a-zA-Z]+)/([-a-zA-Z]+)\.html$ index.php?category=$1&page=$2 [L]
aktuelle Ausgabe:
Array ( [page] => Autovermietungen )
Anzeige in der Adressleiste:
http://www.example.com/Auto-und-Motorrad/Autovermietungen.html
onemorenerd 05-07-2009, 18:39 Hast du die Rewrite-Regeln in der httpd.conf? Dann musst du den Webserver mal neustarten.
Immernoch kein category im $_GET? Dann bau mal einen Syntaxfehler in die Konfig ein. Meckert der Server dann überhaupt?
ich kann den Webserver nicht neu startet.
Ist ein Premium-Paket bei 1und1
wenn ich im Hauptverzeichnis bin, ist die Ausgabe:
Array ( [page] => )
Hier die aktuellen Regeln:
RewriteRule ^([-a-zA-Z]+)\.html$ index.php?category=$1&page=$2 [L]
RewriteRule ^([-a-zA-Z]+)/([-a-zA-Z]+)\.html$ index.php?category=$1&page=$2 [L]
aktuelle Ausgabe:
Array ( [page] => Autovermietungen )
Dann muss ja schon mal dei zweite Regel gegriffen haben, denn bei nur einer Klammerung in der ersten Regel dürfte es dort gar keinen Wert für $2 geben.
Hast du die Kontrollausgabe ganz am Anfang des Scriptes gemacht>
Nicht das irgendwo im Scriptverlauf, vor der Kontrolle, der Eintrag category aus dem $_GET-Array wieder rausgelöscht wird (wäre zwar ungewöhnlich, aber manche Scripte enthalten solche Sachen).
Ich ziehe meinen Hut vor dir.
Im Quellcode weiter oben gab es noch ein:
unset($_GET['category']);
nun habe ich als Ausgabe:
Array ( [category] => Auto-und-Motorrad [page] => Autovermietungen )
@Wahsaga
Leider funktioniert es immer noch nicht.
Hast du vielleicht noch eine Idee?
Im letzten Post ging es doch?! Warum jetzt nicht mehr? Und _was_ genau geht nicht mehr?
nö, eben nicht.
wenn ich im Quelltext: print_r($_GET);
eintrage, zeigt er mir auch die richtige Kategorie an,
aber ich kann dann dort nichts eintragen.
Wenn ich aber mod_rewrite im Script ausschalte, funktioniert es.
irgendwie komisch.
bei dem Link funktioniert es auch:
Top EinträgeWebkatalog-Dienst der kostenlose Webkatalog (http://www.webkatalog-dienst.de/top-listings.html)
nur bei den Kategorien nicht.
Ich habe das Script erst ganz neu gekauft.
Gruß
Jörn
wenn ich im Quelltext: print_r($_GET); eintrage, zeigt er mir auch die richtige Kategorie an, aber ich kann dann dort nichts eintragen.
Vom "Eintragen" von irgendwas ist jetzt zum ersten Mal die Rede.
Wenn ich aber mod_rewrite im Script ausschalte, funktioniert es.
Dann wird wohl vermutlich bei einem Formularversand entweder nicht die richtige Adresse aufgerufen, oder die Parameter nicht richtig umgeschrieben/verarbeitet.
Mit dem bisschen, was du an Information lieferst, ist nicht mehr festzustellen.
Hi,
wenn du mir sagst, wo ich den Fehler suchen muss, wäre mir das sehr hilfreich. Was brauchst du an Infos?
Ich hänge da jetzt nämlich schon fast 5 Tage fest und komme einfacht nicht weiter.
Gruß
Jörn
RewriteRule ^([^/]+)/([^/]+)\.html$ index.php?category=$1&page=$2 [L]
RewriteRule ^([^/]+)\.html$ index.php?category=$1[L]
das funktioniert auch nicht.
Die erste Kategorie lässt sich aufrufen, bei der 2.ten Kategorie ruft er dann immer die gleiche Seite auf :-(
onemorenerd 07-07-2009, 19:01 Tolle Fehlebeschreibung! :rolleyes:
Wer ist denn er; der Browser, der Webserver oder deine index.php? Was steht in den Logs (ggf. Rewrite-Log-Direktive setzen bzw. anpassen)?
Der gelbe Engel! *scnr* :-)
beispiel:
bei dieser Kategorie funktioniert es:
Community«Erotik (kein Hardcore)«HomeWebkatalog-Dienst der kostenlose Webkatalog (http://www.webkatalog-dienst.de/Community.html)
bei dieser Kategorie funktioniert es nicht:
Computer«HomeWebkatalog-Dienst der kostenlose Webkatalog (http://www.webkatalog-dienst.de/Computer/Hardware.html)
Es ist schwer zu beschreiben.
Aktuelle .htaccess:
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteRule ^new-listings.html$ listings.php?view=new [L]
RewriteRule ^top-listings.html$ listings.php?view=top [L]
RewriteRule ^popular-listings.html$ listings.php?view=popular [L]
RewriteRule ^random-listings.html$ listings.php?view=random [L]
RewriteRule ^([-a-zA-Z]+)\.html$ index.php?category=$1&page=$2 [L]
RewriteRule ^([^/]+)/([^/]+)\.html$ index.php?category=$1&page=$2 [L]
Also ich weiss nicht was du hast bei mir bzw. mit allen Links aus deiner Site funzt es.
ich versuche zu erklären:
wenn du folgende Kategorie aufrufst:
Computer«HomeWebkatalog-Dienst der kostenlose Webkatalog (http://www.webkatalog-dienst.de/Computer/Hardware.html)
zeigt er die richtige Kategorie an.
Klickst du aber jetzt links im Menü "Eintrag vorschlagen" dann springt er eine Kategorie nach oben und es kommt die Meldung "gesperrt"
Aber:
Wenn du auf folgende Kategorie gehst:
Community«Erotik (kein Hardcore)«HomeWebkatalog-Dienst der kostenlose Webkatalog (http://www.webkatalog-dienst.de/Community.html)
dann klickst du links wieder auf "Eintrag vorschlagen" und es funktioniert wie es sein soll. Wenn ich mod_rewrite ausschalte, funktioniert es aber in allen Kategorien.
Mfg
Das schöne - und so muss es ja sein - ist bei htaccess das bei gleichem Input immer das gleiche heraus kommt.
Bis auf die id sind die Links identisch - kann also auch rein nichts mit htaccess zu tun haben, denn schliesslich springt man sogar auf den korrekten Einstiegspunkt.
Man nehme vielleicht mal die Meldung wörtlich.
Hi,
das klingt logisch was du sagst.
Nun habe ich aber mod_rewrite ausgeschaltet und prompt funktioniert es überall. Muss ich nun den Fehler an anderer Stelle suchen und wenn ja, wo?
Schau auf die Webseite, es funktioniert in jeder Kategorie und in jeder Unterkategorie ohne Ausnahme.
Ich würde erst einmal untersuchen wann und unter welchen Bedingungen die Gesperrt Meldung ausgelöst wird.
Hats du den Grund hast du die Ursache.
die Meldung "Kategorie gesperrt" ist gewollt.
Ich habe die Hauptkategorien geblockt, damit dort keine Einträge verfasst werden können. Man darf einen Eintrag ausschliesslich in einer Unterkategorie vornehmen.
Das kann auch nicht der Grund sein, sonst dürfte es ja mit eingeschaltetem mod_rewrite auch in keiner Kategorie funktionieren.
Kann es wirklich so sein, dass es ohne mod_rewrite funktioniert und wenn man es einschaltet, das nicht mehr klappt? Ausser in einer Kategorie? Wie du ja selbst schon gesagt hast, es werden ja im Prinzip nur die URL's umgeleitet, mehr passiert ja nicht.
Wenn gewisse Teile Informationen direkt abgreifen dann wäre es denkbar.
Ich glaube die htaccess arbeitet einwandfrei, wenn da noch etwas ist liegts am Script.
onemorenerd 08-07-2009, 01:59 RewriteRule ^new-listings.html$ listings.php?view=new [L]
RewriteRule ^top-listings.html$ listings.php?view=top [L]
RewriteRule ^popular-listings.html$ listings.php?view=popular [L]
RewriteRule ^random-listings.html$ listings.php?view=random [L]
Kannst du mit (new|top|popular|random) zusammenfassen. Noch besser wäre, auch hierfür ein Catch-All zu haben und unerwünschte Werte mit PHP rauszufiltern.
RewriteRule ^([-a-zA-Z]+)\.html$ index.php?category=$1&page=$2 [L]
Das einsame "-" macht mich stutzig. Funktioniert das?
Woher soll $2 kommen?
Das einsame "-" macht mich stutzig. Funktioniert das?
Ja, da muss es sogar hin, wenn man es nicht escapen will. Finde ich persönlich direkt übersichtlicher.
onemorenerd 08-07-2009, 02:26 Ja, da muss es sogar hin, wenn man es nicht escapen will. Finde ich persönlich direkt übersichtlicher.
Ich finde es grottig! Wer denkt sich denn sowas aus?
"Steuerzeichen müssen an 1. Stelle nicht escaped werden", das wäre okay. Geht aber nicht, denn \ spielt da nicht mit. Also haben wir hier eine Ausnahme (nicht escapen an 1. Stelle), die in sich wieder eine Ausnahme (gilt nicht für \) trägt. :goth:
Ein punkt muss innerhalb einer Zeichenklasse nie escaped werden iirc ;)
onemorenerd 08-07-2009, 02:49 Dann ist der Punkt kein Steuerzeichen. Wäre er eins, hätte er irgendeine Funktion und folglich müsste man ihn escapen, um das Literal zu erhalten.
Wie kommst du jetzt eigentlich auf den Punkt?
Guten Morgen,
ich habe den Teil im Script gefunden, der bei mod_rewrite greift:
if (ESYN_MOD_REWRITE)
{
if($category['id']>0 && $config->get('use_html_path'))
{
$url = $config->get('base').$config->get('dir').$category['path'].'_%1.html';
}
elseif($category['id']==0)
{
$url = $config->get('base').$config->get('dir').'index%1.html';
}
else
{
$url = $config->get('base').$config->get('dir').$category['path'].'/index%1.html';
}
}
else
{
$url = $config->get('base').$config->get('dir').'index.php?category='.$category['id'];
}
$esynSmarty->assign('url', $url);
Hier kann ich aber nichts ungewöhnliches entdecken.
ich habe den Teil im Script gefunden, der bei mod_rewrite greift:
Der ist, wie's aussieht, nur für das Erzeugen von passenden Links zuständig.
Ob die "richtig" sind, wirst du ja schon an hand der Ausgabe überprüft haben, nehmen ich an.
|