Gabriel: mod_rewrite Problem

Hallo,

ich bin kürzlich mit meinem Webspace auf einen anderen Server umgezogen und habe nun ein Problem - folgender Code (einziger Inhalt einer .htaccess) hat auf dem alten Server einwandfrei funktioniert, auf dem neuen aber nicht mehr:

RewriteEngine On
Options +FollowSymlinks
RewriteBase /
RewriteRule ^(.*)(.html)$ index_html.php?site=$1 [QSA]
RewriteRule ^(.*)(.txt)$ index_txt.php?site=$1 [QSA]
RewriteRule ^(.*)(.png)$ index_png.php?site=$1 [QSA]
RewriteRule ^(.*)(.jpg)$ index_jpg.php?site=$1 [QSA]

Das liefert immer einen unschönen Internal Server Error. Ja, mod_rewrite ist aktiviert. Und ja, es sind exakt die selben Dateien in dem betreffenden Verzeichnis. An was könnte das liegen?

Mit der Aktion will ich bezwecken, dass der angeforderte Content je nach Fall als .txt (zum includen), als .html oder als Bild ausgegeben wird. Auf dem alten Server ging das einwandfrei.

Ich würde mich über Hilfe sehr freuen.

Gruß,
Gabriel

  1. RewriteRule ^(.*)(.html)$ index_html.php?site=$1 [QSA]

    Das liefert immer einen unschönen Internal Server Error. Ja, mod_rewrite ist aktiviert. Und ja, es sind exakt die selben Dateien in dem betreffenden Verzeichnis. An was könnte das liegen?

    Das steht im Fehlerprotokoll des Servers. Schau da rein.

    Davon unabhängig und nicht fehlerverursachend ist die Klammer um die Namenserweiterung überflüssig, sowie der Punkt am Beginn der Erweiterung kein Punkt, sondern ein Platzhalter, den Punkt bekommst du mit . .

    1. Hallo,

      danke für den Post.

      Das liefert immer einen unschönen Internal Server Error. Ja, mod_rewrite ist aktiviert. Und ja, es sind exakt die selben Dateien in dem betreffenden Verzeichnis. An was könnte das liegen?

      Das steht im Fehlerprotokoll des Servers. Schau da rein.

      Ich habe leider nur Webspace und nicht den gesamten Server, deshalb habe ich nicht auf irgendwelchen ausführlichen Logfiles zugriff und mein access_log verrät mir auch nicht mehr als "..."GET / HTTP/1.1" 500...". Ausführlichere Log-Levels kann ich nicht einstellen.

      Davon unabhängig und nicht fehlerverursachend ist die Klammer um die Namenserweiterung überflüssig, sowie der Punkt am Beginn der Erweiterung kein Punkt, sondern ein Platzhalter, den Punkt bekommst du mit . .

      Danke für den Tipp, den Punkt werde ich noch escapen.

      Gibt es sonst Lösungsvorschläge?

      Gruß,
      Gabriel

      1. Das liefert immer einen unschönen Internal Server Error.

        Das steht im Fehlerprotokoll des Servers. Schau da rein.

        Ich habe leider nur Webspace und nicht den gesamten Server

        Unerheblich, mit Server meinte ich auch den Webserver, also das Programm, nicht die Maschine. Das Fehlerprotokoll des Webservers ist ein unverzichtbares Hilfsmittel und deshalb bei jedem anständigen Hoster verfügbar. Sowas gehört zur Grundausstattung wie das Lenkrad zum Auto, das gibt's auch nicht nur bei Luxuskarossen.

        Gibt es sonst Lösungsvorschläge?

        Die .htaccess scheint jedenfalls in Ordnung.

        Wende dich an deinen Hoster, damit er dir sagt, wo er besagtes Fehlerprotokoll versteckt hat. Oder wechsle den Hoster, wenn er dir das tatsächlich unterschlägt.

        1. Wende dich an deinen Hoster, damit er dir sagt, wo er besagtes Fehlerprotokoll versteckt hat. Oder wechsle den Hoster, wenn er dir das tatsächlich unterschlägt.

          Ich werde den Hoster mal anschreiben.

          Aber gerade ist mir beim weiteren Testen noch etwas interessantes aufgefallen:

          Auf das Verzeichnis sind eine Domain und drei Subdomains (nicht alle sind Subdomains der selben Domain) geschalten. Wenn ich den kompletten Inhalt des Ordners in einen anderen Ordner verschiebe auf den nur eine Subdomain verweist dann geht alles einwandfrei!? Im normalen Verzeichnis kommt über jede Domain die Fehlermeldunmg...

          1. Auf das Verzeichnis sind eine Domain und drei Subdomains (nicht alle sind Subdomains der selben Domain) geschalten. Wenn ich den kompletten Inhalt des Ordners in einen anderen Ordner verschiebe auf den nur eine Subdomain verweist dann geht alles einwandfrei!? Im normalen Verzeichnis kommt über jede Domain die Fehlermeldunmg...

            Dann ist möglicherweise bei einer Domain oder Subdomain ein bestimmtes Recht für die .htaccess nicht gegeben - auch wenn das insofern fraglich ist, als dass die Domains sicherlich alle mit der gleichen Basiskonfiguration arbeiten und somit alle den Fehler zeigen müssten, auch einzeln.

            1. Hallo,

              Dann ist möglicherweise bei einer Domain oder Subdomain ein bestimmtes Recht für die .htaccess nicht gegeben - auch wenn das insofern fraglich ist, als dass die Domains sicherlich alle mit der gleichen Basiskonfiguration arbeiten und somit alle den Fehler zeigen müssten, auch einzeln.

              Das übersteigt nun meine Kentnisse und vor allem meinen Einstellungs-Einfluss auf die Serverkonfiguration :-). Habe gerade ein Supportticket an meinen Hoster eröffnet. Da bin ich mal auf die Antwort gespannt.

              Soweit mal vielen Dank für die Hilfe - für weitere Tipps, was ich evtl. noch selber machen könnte bin ich natürlich jederzeit weiter offen :-).

              Gruß,
              Gabriel

            2. Hallo,

              Dann ist möglicherweise bei einer Domain oder Subdomain ein bestimmtes Recht für die .htaccess nicht gegeben - auch wenn das insofern fraglich ist, als dass die Domains sicherlich alle mit der gleichen Basiskonfiguration arbeiten und somit alle den Fehler zeigen müssten, auch einzeln.

              Oh - ich habe gerade noch etwas bemerkt. Über eine Subdomain funktioniert der Zugriff einwandfrei. Die hatte ich irgendwie vergessen zu testen. Und interessanterweise ist das auch genau die Subdomain, zu als erste auf dieses Verzeichnis geschaltet war. Somit scheint sich deine Theorie doch zu bestätigen...

              Gruß,
              Gabriel

              1. Hallo,

                um kurz den Ausgang zu schildern:

                Für meinen Account muss ich (unter anderem) mod_rewrite explizit aktivieren, damit es funktioniert - das hatte ich auch schon längst getan.

                Nun wurde ich aber vom Support darüber in Kenntnis gesetzt, dass sich eine Änderung nur auf die bereits existierenden Domains beziehen (egal welches Level). Ein erneutes Aktivieren von mod_rewrite hat dem Spuk ein Ende bereitet...

                Danke für die Hilfe!

                Noch kurz etwas anderes, auch wenn es etwas oot ist: Ich habe irgendwo gelesen, dass man für die letzte Regel immer ein [L] anhängen soll - bei mir ging es bisher auch einwandfrei ohne. Hat das irgendeine besondere Bewandnis?

                Gruß,
                Gabriel

                1. Ich habe irgendwo gelesen, dass man für die letzte Regel immer ein [L] anhängen soll - bei mir ging es bisher auch einwandfrei ohne. Hat das irgendeine besondere Bewandnis?

                  mod_rewrite läuft alle Regeln nacheinander ab, auch, wenn eine bereits zutraf und die URL damit geändert wurde. In dem Fall wirken die nachfolgenden Regeln auf die geänderte URL.

                  Angenommen, du hättest folgende zwei Regeln:

                  RewriteRule a b
                  RewriteRule b c

                  Käme nun die URL a daher, würde sie von Regel 1 in b geändert. Es wird dann aber nicht b aufgerufen, sondern Regel 2 greift auch noch und ändert unser gerade erst erhaltenes b in c.
                  Anders, wenn bei Regel 1 die Option L, also last, gesetzt wäre. In dem Fall würde zwar wieder Regel 1 a in b ändern, aber die Verarbeitung wäre damit beendet, Regel 2 greift nicht mehr.

                  1. Hallo,

                    »»»» Ich habe irgendwo gelesen, dass man für die letzte Regel immer ein [L] anhängen soll - bei mir ging es bisher auch einwandfrei ohne. Hat das irgendeine besondere Bewandnis?

                    mod_rewrite läuft alle Regeln nacheinander ab, auch, wenn eine bereits zutraf und die URL damit geändert wurde. In dem Fall wirken die nachfolgenden Regeln auf die geänderte URL.

                    Ja, das ist mir bekannt. Es ging aber darum, bei der letzten Regel IMMER ein [L] zu setzen, auch wenn nur eine Regel existiert. Hättte ich vielleicht etwas präziser schreiben sollen.
                    Das hieß es mal irgendwo aber mir kommt das nicht so sonderlich sinnvoll vor. Deshalb wollte ich kurz nachhaken, was die Experten dazu sagen :-).

                    Gruß,
                    Gabriel

                    1. »»»» Ich habe irgendwo gelesen, dass man für die letzte Regel immer ein [L] anhängen soll - bei mir ging es bisher auch einwandfrei ohne. Hat das irgendeine besondere Bewandnis?

                      Ja, das ist mir bekannt. Es ging aber darum, bei der letzten Regel IMMER ein [L] zu setzen, auch wenn nur eine Regel existiert. Hättte ich vielleicht etwas präziser schreiben sollen.

                      Nein, sorry, habe ich überlesen. Bei der letzten Regel noch ein [L] hinterzusetzen ist nur insofern sinnvoll, als dass man dann bei späteren Erweiterungen nicht das (für den einen oder anderen unerwartete) Problem hat, dass die vormals letzte Regel nicht mehr den Abschluss markiert, sondern zum Durchlaufposten wurde, und sich damit der ursprüngliche Teil der Konstruktion scheinbar anders benimmt, obwohl dort nichts geändert wurde.
                      Wenn man's denn gleich merkt, weil alles auseinanderfällt, ist es ja noch gut, aber wenn sich dadurch unbemerkt Lücken einschleichen …

                      Funktionell also kein Unterschied, nur eine Absicherung für die Zukunft. Durchaus praktikabler Tipp.

                      1. Funktionell also kein Unterschied, nur eine Absicherung für die Zukunft. Durchaus praktikabler Tipp.

                        Ok - danke.

  2. Moin,

    ein mir bekannter Fall erzeugte einen 500er wegen der Zeile:

    Options +FollowSymlinks

    Options zu überschreiben war verboten, der Rest funktionierte aber. Da die Option "+FollowSymlinks" schon in der Serverkonfiguration vorgegeben war, war sie in der .htaccess so über wie flüssig.
    Einen Test ist es vielleicht wert, die Zeile auszukommentieren.

    Wobei es nicht sehr wahrscheinlich ist, die 500er sollte dann auch bei den Subdomains greifen, aber wer weiss.

    mit freundlichen Grüßen
    Ulrich

    --
    Teiltransparente Bereiche
    selfcode: sh:| br:> ie:% mo:) va:) de:] zu:) fl:( ss:| ls:[
    um-fritz.de