mod_rewrite-Problem mit neuem Server

scope

scope

Aktives Mitglied
Thread Starter
Dabei seit
24.01.2005
Beiträge
4.124
Reaktionspunkte
305
Ich habe für eine Website eine .htaccess-Datei geschrieben.
Die lief auf meinem Testserver auch problemlos.
Jetzt auf dem neuen Server, bei einem anderen Anbieter, funktioniert diese entweder gar nicht (404) oder produziert einen Fehler (500)

Code:
RewriteEngine on
Options FollowSymLinks

RewriteBase /

RewriteRule ^gallery/$ 			?action=gallery
RewriteRule ^about/$ 			?action=about
RewriteRule ^contact/$ 			?action=contact

RewriteRule ^gallery$ 			?action=gallery
RewriteRule ^about$ 			?action=about
RewriteRule ^contact$ 			?action=contact

Code:
RewriteRule ^gallery/([a-z0-9-_]+)/([0-9]+)$ 		?action=photo&category=$1&photo=$2
RewriteRule ^gallery/([a-z0-9-_]+)/([0-9]+)/$ 		?action=photo&category=$1&photo=$2

RewriteRule ^gallery/([a-z0-9-_]+)$ 		?action=photo&category=$1
RewriteRule ^gallery/([a-z0-9-_]+)/$ 		?action=photo&category=$1

Die beiden Teile stehen eigentlich in einer Datei, aber ich habs hier mal getrennt.
Ohne den unteren Teil kommt kein Fehler mehr, es wird nur nichts mehr gefunden.

mod_rewrite ist aktiviert auf dem Server, das habe ich schon überprüft.
Leider bin ich nicht soo bewandert was diese Zeilen angeht, dass ich wirklich eine Idee hätte, was das Problem sein könnte.. :D

Hat vielleicht irgendwer einen Ansatz, woran es liegen kann?
 
Ok, das geht jetzt schnell.
Den 404 kriegt man bei dem Server anscheinend weg, wenn man die zweite Zeile weglässt.

Aber was führt dazu, dass der zweite Teil meines Scripts auf einmal nicht mehr läuft?
 
Der zweite Teil kann ja gar nicht mehr laufen, da für /gallery bereits im ersten Teil eine Regel definiert wurde. Wenn Du den zweiten Teil an den Anfang stellst, müßte er eigentlich funktionieren.
 
Ich kann es gerne versuchen, aber das stimmt ja so nicht.
Hinter "gallery" und "gallery/" muss ja in der ersten Regeln definitiv Schluss sein, da sind die letzten Regeln ja noch nicht mit eingeschlossen.

Einen Fehler würde dein Grund auch nicht begründen..

Und da es vorher geklappt hat, spricht auch so einiges dagegen.
 
Ob das wirklich hilft, kann ich dir leider nicht sagen, aber probier doch mal eine andere Reihenfolge. Mit dem Fragezeichen hinter dem Slash müssten sich die RewriteRules reduzieren lassen:
Code:
RewriteRule ^gallery/([a-z0-9-_]+)/([0-9]+)/?$  ?action=photo&category=$1&photo=$2 [QSA,L,S=5]
RewriteRule ^gallery/([a-z0-9-_]+)/?$           ?action=photo&category=$1 [QSA,L,S=4]
RewriteRule ^gallery/?$                         ?action=gallery [QSA,L,S=3]
.
.
.
 
Das gibt leider immer noch einen 500er-Fehler.
Wobei die dritte Zeile alleine funktioniert.

Was ist denn bitte so besonderes an den beiden Zeilen?


Aber vielen Dank für die Vereinfachung der restlichen Zeilen! :D
 
Darf man fragen, bei welchem Provider du bist?

Strato unterstützt z.B. gar kein mod_rewrite.
 
Es unterstützen sehr viele keine mod_rewrite. Daher würde ich als erstes den Provider fragen bevor du dich abmühst. Ich sprech aus eigener Erfahrung.;-)
 
Wie gesagt, mod_rewrite funktioniert, die ersten Zeilen laufen auch problemlos. Ich bin zwar ratlos, aber nicht doof :D
Und der Provider ist Quadra Hosting
 
Was sagt das Log?
Ich hoffe Du hast das Logging auch eingeschaltet.
 
In welchem Programm editierst du die .htaccess-Datei? Fehler 500 könnte bedeuten, dass die Kodierung nicht stimmt.
 
Was sagt das Log?
Ich hoffe Du hast das Logging auch eingeschaltet.

Nichts.
Das ist das Problem. Error log ist eingeschaltet, bleibt aber leer.

In welchem Programm editierst du die .htaccess-Datei? Fehler 500 könnte bedeuten, dass die Kodierung nicht stimmt.

Das werde ich gleich mal nachsehen.
TextMate mit UTF-8 wenn ich mich recht erinnere..

Edit: Nein, auch ISO-8859-1 bringt keinen Unterschied.
 
Nur nochmal nachgefragt: Zeile 3 aus dem Beispiel funktioniert, aber sobald ein $-Backreference auftaucht gibt es einen Fehler?
 
Zuletzt bearbeitet:
Danach sieht es aus, ja.
 
Da ich bisher immer nur RewriteRules direkt für die index.php verwendet habe, weiß ich nicht, ob der Slash ein Problem sein kann - und da es alles schon mal funktioniert hat, vermutlich nicht - aber versuchs doch mal mit einem Escape \/.
 
Nichts.
Das ist das Problem. Error log ist eingeschaltet, bleibt aber leer.
Das steht auch im mod_rewrite-Log und nicht im Access-log und auch nicht unbedingt im Error-log. Notfalls immer auf debug setzen.
 
Ich kann es gerne versuchen, aber das stimmt ja so nicht.
Hinter "gallery" und "gallery/" muss ja in der ersten Regeln definitiv Schluss sein, da sind die letzten Regeln ja noch nicht mit eingeschlossen.

Sorry, hatte es nicht so genau gelesen... Jetzt beim zweiten Lesen kommt mir aber gerade in den Sinn, daß man Slashes doch escapen muß, oder? Probier mal:

Code:
RewriteRule ^gallery\/([a-z0-9-_]+)\/([0-9]+)\/?$   ?action=photo&category=$1&photo=$2 [QSA,L,S=5]
RewriteRule ^gallery\/([a-z0-9-_]+)\/?$             ?action=photo&category=$1 [QSA,L,S=4]
RewriteRule ^gallery\/?$                            ?action=gallery [QSA,L,S=3]
 
  • Gefällt mir
Reaktionen: scope
Bei mod_rewrite muss nichts escaped werden. Sind keine Strings, die an eine weitere Shell oder ähnliches übergeben werden.

EDIT: Ich vermute, dass er in eine endlose Rekursion geht. Das sieht man aber eben nur im Rewrite-Log.
 
Zuletzt bearbeitet:
So, ich habe den Provider gebeten, temporär das mod_rewrite-Log anzustellen und es sagt einfach folgendes:

Code:
[Thu Dec 6 07:34:22 2007] [alert] [client 84.60.53.130] /hsphere/local/home/oneill06/carlyoneill.com.au/.htaccess: RewriteRule: cannot compile regular expression '^gallery/([a-z0-9-_]+)/([0-9]+)/?$'\n

Hilft das irgendwie bei der Problemfindung?
 
Ja, es steht da. Die regular Expression ist fehlerhaft. Der eine Punkt kam mir schon etwas komisch vor. Aber da ich es nicht genau wusste, wollte ich erst einmal die Fehlermeldung sehen.

http://perldoc.perl.org/perlre.html
You can specify a character class, by enclosing a list of characters in [] , which will match any one character from the list. If the first character after the "[" is "^", the class matches any character not in the list. Within a list, the "-" character specifies a range, so that a-z represents all characters between "a" and "z", inclusive. If you want either "-" or "]" itself to be a member of a class, put it at the start of the list (possibly after a "^"), or escape it with a backslash. "-" is also taken literally when it is at the end of the list, just before the closing "]". (The following all specify the same class of three characters: [-az] , [az-] , and [a\-z] . All are different from [a-z] , which specifies a class containing twenty-six characters, even on EBCDIC based coded character sets.) Also, if you try to use the character classes \w , \W , \s, \S , \d , or \D as endpoints of a range, that's not a range, the "-" is understood literally.
Ich bin kein regex-Experte. Bei mir läuft das auch meistens aufs Probieren hinaus. Ich würde daher mal folgendes Probieren:
Code:
RewriteRule ^gallery\/([a-z0-9_-]+)\/([0-9]+)\/?$   ?action=photo&category=$1&photo=$2 [QSA,L,S=5]
RewriteRule ^gallery\/([a-z0-9_-]+)\/?$             ?action=photo&category=$1 [QSA,L,S=4]
RewriteRule ^gallery\/?$                            ?action=gallery [QSA,L,S=3]
 
  • Gefällt mir
Reaktionen: scope
Zurück
Oben Unten