Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
mod_rewrite regel funktioniert nicht [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
mod_rewrite regel funktioniert nicht


 
pjoern
05-07-2009, 15:23 
 
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?

 
wahsaga
05-07-2009, 16:17 
 
Wenn du zwischen einem \ und einem / nicht unterscheiden kannst, solltest du dich an den Augenarzt oder Optiker deines Vertrauens wenden.

 
pjoern
05-07-2009, 16:28 
 
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 :-(

 
wahsaga
05-07-2009, 16:44 
 
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 ...?!

 
pjoern
05-07-2009, 17:24 
 
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]

 
wahsaga
05-07-2009, 17:25 
 
Schön - schaffst du es vielleicht auch noch, die andere Rückfrage zu beantworten ...?

 
pjoern
05-07-2009, 17:35 
 
Ausgabe: Array ( [page] => Autovermietungen )

 
wahsaga
05-07-2009, 17:44 
 
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.

 
pjoern
05-07-2009, 17:57 
 
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?

 
pjoern
05-07-2009, 18:53 
 
ich kann den Webserver nicht neu startet.
Ist ein Premium-Paket bei 1und1

wenn ich im Hauptverzeichnis bin, ist die Ausgabe:


Array ( [page] => )

 
wahsaga
05-07-2009, 19:08 
 
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).

 
pjoern
05-07-2009, 21:03 
 
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 )

 
pjoern
07-07-2009, 10:52 
 
@Wahsaga

Leider funktioniert es immer noch nicht.
Hast du vielleicht noch eine Idee?

 
unset
07-07-2009, 10:54 
 
Im letzten Post ging es doch?! Warum jetzt nicht mehr? Und _was_ genau geht nicht mehr?

 
pjoern
07-07-2009, 15:18 
 
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

 
wahsaga
07-07-2009, 15:45 
 
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.

 
pjoern
07-07-2009, 17:50 
 
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

 
piratos
07-07-2009, 17:59 
 
RewriteRule ^([^/]+)/([^/]+)\.html$ index.php?category=$1&page=$2 [L]
RewriteRule ^([^/]+)\.html$ index.php?category=$1[L]

 
pjoern
07-07-2009, 18:57 
 
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)?

 
unset
07-07-2009, 19:08 
 
Der gelbe Engel! *scnr* :-)

 
pjoern
07-07-2009, 19:08 
 
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]

 
piratos
07-07-2009, 19:28 
 
Also ich weiss nicht was du hast bei mir bzw. mit allen Links aus deiner Site funzt es.

 
pjoern
07-07-2009, 20:26 
 
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

 
piratos
07-07-2009, 20:43 
 
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.

 
pjoern
07-07-2009, 21:12 
 
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.

 
piratos
07-07-2009, 22:03 
 
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.

 
pjoern
07-07-2009, 22:15 
 
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.

 
piratos
07-07-2009, 22:45 
 
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?

 
unset
08-07-2009, 02:03 
 
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:

 
unset
08-07-2009, 02:38 
 
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?

 
pjoern
08-07-2009, 11:27 
 
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.

 
wahsaga
08-07-2009, 15:24 
 
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.


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:32 Uhr.