Seite 1 von 2

Mod Rewrite Problem

Verfasst: 24.09.2008, 11:24
von dirk30
Hallo,

habe ein Problem mit folgenden Code:

RewriteEngine on
RewriteRule ^jokes/([0-9]+)/(.*)$ joke.php?jokeid=$1 [L]
RewriteRule ^category/([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ list.php?catid=$1&pagenum=$2&listtype=$3 [NC]

die drite Zeile die Kategorie funktioniert einwand frei. Nur die zweite funktioniert nicht ist in der zweite Zeile ein Variable falsch oder kann es wo anders dran liegen?

Gruss
Dirk

Verfasst:
von

Verfasst: 24.09.2008, 11:35
von Mamphil
Hi,

was soll denn rauskommen?
jokes/meinWitz/12345 wird weitergeleitet auf joke.php?jokeid=meinWitz.

Mamphil

Verfasst: 24.09.2008, 11:44
von dirk30
im Moment wird mit Mode Rewrite diese URL angezeigt xxx
da kommt ein 404

wenn ich im Webrowser das s von jokes streiche zeigt er mir kein 404 mehr an aber es wird in den Fall kein Inhalt (der Witz)angezeigt der in einer SQL Datenbank liegt.

xxx

Ist die Orginal .htacess die beim Script dabei war. Was kann falsch sein?

Gruss
Dirk

Verfasst:
von

Verfasst: 24.09.2008, 11:55
von Mamphil
Hi,

ist das wirklich die aktuell genutzte .htaccess, die auch online ist?

Mamphil

Verfasst: 24.09.2008, 12:00
von dirk30
das ist noch eine Zeile mehr drin siehe 1 Zeile aber mit oder ohne diese zeile ist das ergebnis gleich

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^jokes/([0-9]+)/(.*)$ joke.php?jokeid=$1 [NC]
RewriteRule ^category/([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ list.php?catid=$1&pagenum=$2&listtype=$3 [NC]

Verfasst: 24.09.2008, 12:08
von Mamphil
Da gibt es aber einen großen Unterschied... Probier mal folgendes:

Code: Alles auswählen

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^jokes/([0-9]+)/(.*)$ joke.php?jokeid=$1 [NC,L]
RewriteRule ^category/([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ list.php?catid=$1&pagenum=$2&listtype=$3 [NC,L]
Mamphil

Verfasst: 24.09.2008, 12:11
von dirk30
klappt leider nicht.

Kategorie Seiten kein Problem wie vorher. Witze Unterseiten = 404

Verfasst: 24.09.2008, 12:16
von Mamphil
Irgendwie glaube ich nicht, dass das die einzigen mod_rewrite-Einstellungen sind, die du konfiguriert hast, denn ich sehe nicht, wieso https://www.jokes-humour.com/joke/82/ funktionieren sollte - es sei denn, du hast noch ein Verzeichnis /joke/ mit einer zusätzlichen .htaccess

Darum: Was für einen Webspace hast du denn? Betreibst du deinen eigenen Server? Hast du mal soetwas einfaches probiert:

Code: Alles auswählen

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^jokes/(.*)/(.*)$ joke.php?jokeid=$1&Param2=$2 [R=302]
Mamphil

Verfasst: 24.09.2008, 12:27
von dirk30
[quote="Mamphil"]Irgendwie glaube ich nicht, dass das die einzigen mod_rewrite-Einstellungen sind, die du konfiguriert hast, denn ich sehe nicht, wieso x funktionieren sollte - es sei denn, du hast noch ein Verzeichnis /joke/ mit einer zusätzlichen .htaccess

ne gibt kein Verzeichnis gibt nur in der Tabelle SQL Tabelle jokes ein Feld mit den Namen joke (Wo die Witze selber drin sind)

diese Seite xliegt auf den selben Webspace da habe ich kein Problem mit Mode Rewrite

die Orginal Urls schauen so aus
x

Verfasst: 24.09.2008, 19:15
von Mork vom Ork
Mamphil hat geschrieben:ich sehe nicht, wieso /joke/82/ funktionieren sollte - es sei denn, du hast noch ein Verzeichnis /joke/ mit einer zusätzlichen .htaccess
Sein Server hat Content Negotiation eingeschaltet, so dass der Apache automatisch die den Browser-Wünschen entsprechende Datei aussucht. Beim Aufruf von "bla.html" würde der Server zum Beispiel von den beiden Dateien bla.html.de und bla.html.en die deutschsprachige Fassung bla.html.de ausliefern, falls der Browser signalisiert, sein Herr und Gebieter bevorzuge die deutsche Sprache.

In diesem Fall wird für beim Aufruf der URL /joke die Resource joke.php ausgewählt.

Weiterhin kommt hinzu, dass offenkundig die Option Path Info ebenfalls aktiviert ist. Beim Aufruf eines wie auch immer „lebendigen“ Inhalts, wie eben ein PHP-Skript, lässt sich an den Skriptnamen noch weiterer Krams verzeichnismäßig anhängen. Man kann also /bla.php/123/456 aufrufen, es wird das Skript bla.php ausgeführt und bekommt in der Variablen PATH_INFO den Text /123/456 übergeben.

Content Negotiation und Path Info zusammen führen dazu, dass man hier /joke/82/Horse-power aufrufen kann. Für /joke wird joke.php ausgewählt, und das kein Witz kommt, liegt daran, dass joke.php einen URL-Parameter jokeid erwartet, nicht die Variable PATH_INFO.

Es eröffnen sich somit zwei Lösungsmöglichkeiten:

1.
mod_rewrite über Bord kippen und Skript für PATH_INFO umschreiben.


2.
Wie du schon vorgeschlagen hattest, dies in /.htaccess

RewriteEngine on
RewriteBase /
RewriteRule ^jokes/([0-9]+) joke.php?jokeid=$1 [R=302]

und schauen, ob und wenn ja, an welche URL weitergeleitet wird. Falls keine Weiterleitung erfolgt, passt das Muster nicht; dann Muster testweise kürzen, zum Beispiel

RewriteRule ^jokes joke.php?jokeid=82 [R=302]

(Nicht kürzer als jokes machen, dann gibt's eine Endlosschleife.)

Verfasst: 24.09.2008, 19:54
von dirk30
mit 2 passiert nicht zeigt an wie davor 404 x
Warum funktioniert es eigentlich bei den Kategorien Seiten aber bei den Unterseiten der Witze nicht? Müsste doch eigentlich bei beiden dann nicht gehen?

Ich kann bei meinen Provider folgende Sachen ändern ist da irgendwas bei was die beiden Sachen Path Info und.... betreffen?
PHP-Errors Im Browser ausgeben ändern
PHP-RegisterGlobals
PHP-Magic-
PHP-Zend-ZE1-Kompatibilität
PHP-Register-Long-Arrays Serverstandard ändern
PHP-Session-Use-Trans-SID Serverstandard ändern
PHP-Allow-Call-Time-Pass-Reference Serverstandard ändern
PHP-MySQL-Secure-Login Serverstandard ändern
PHP Suhosin Session Encryption Serverstandard ändern
PHP Suhosin Mail Protection 1
PHP Suhosin RPG Max Vars
PHP5-Extensions einstellen
CGI-Extensions einstellen
Directoryindex einstellen

Verfasst: 25.09.2008, 08:33
von Mork vom Ork
dirk30 hat geschrieben:mit 2 passiert nicht zeigt an wie davor 404 https://www.jokes-humour.com/jokes/82/Horse-power/
Ändere die RewriteRule-jokes-Zeile doch mal in

RewriteRule jokes joke.php?jokeid=82 [R=302]

und melde dich wieder, wenn's drin ist. Zitiere dann auch deine vollständige .htaccess und baue die Zeile nicht aus, egal, was passiert.
Warum funktioniert es eigentlich bei den Kategorie-Seiten, aber bei den Unterseiten der Witze nicht?
Das ist genau der Knackpunkt. Eigentlich kann das, was da gerade passiert, nicht sein, deswegen ist es unerlässlich, dass wir deine .htaccess genau kennen, ohne Änderung, um auszuschließen, dass wir hier etwas beobachten, was von einer völlig anderen .htaccess veranstaltet wird.
Ich kann bei meinen Provider folgende Sachen ändern ist da irgendwas bei was die beiden Sachen Path Info und.... betreffen?
Da bräuchtest du nichts ändern, beides ist bereits eingeschaltet. Möchtest du es ausschalten, schreibst du folgendes in deine .htaccess:

AcceptPathInfo off
Options -MultiViews

Verfasst: 25.09.2008, 09:17
von dirk30
habe die zeile eingefügt komplette .htacess schaut jetzt so aus.


Options +FollowSymlinks
RewriteEngine on

RewriteRule jokes joke.php?jokeid=82 [R=302]
RewriteRule ^category/([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ list.php?catid=$1&pagenum=$2&listtype=$3 [NC]



Angezeigt wenn ich auf den Witze 82 klicke wird jetzt folgende URL (mit 404 Fehler)

x

Verfasst: 25.09.2008, 15:52
von Mork vom Ork
dirk30 hat geschrieben:RewriteRule jokes joke.php?jokeid=82 [R=302]

Angezeigt wenn ich auf den Witze 82 klicke wird jetzt folgende URL (mit 404-Fehler)

https://jokes-humour.com/jokes/82/Horse ... rsv07b8se1
Dann greift das Muster überhaupt nicht. Was passiert, wenn du die category-Zeile auskommentierst (# davorsetzen), gibt's dann auch bei category-Aufrufen einen 404? Falls ja: Was passiert, wenn du die category-Zeile wie folgt abänderst:

RewriteRule ^category/([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ joke.php?jokeid=$1 [NC]

Das Muster bleibt gleich, lediglich das Ziel wird geändert. Es müsste beim Aufruf einer Kategorie also statt wie bisher einer Kategorie ein Witz erscheinen.

Verfasst: 25.09.2008, 17:16
von dirk30
ja wenn ich die Codezeile eingebe erscheint eine Witze Unterseite z.B x nur ohne Witze weil mit der ID na klar kein Witz in der DB ist.