MB: .htaccess httpd.conf kaputt!

nabend,

ich hardere schon seit wochen oder monaten damit.

Serverfehler!

Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist. Der Server ist entweder überlastet oder ein Fehler in einem CGI-Skript ist aufgetreten.

Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.
Error 500
localhost
Apache/2.4.17 (Win32) OpenSSL/1.0.2d PHP/5.6.15 

.htaccess

Options -MultiViews
Options +FollowSymlinks
RewriteEngine On
RewriteBase /CodecourseMVC/public
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond ^(.+)$ index.php?url=$1 [QSA,L]

wenn ich das klämmersche ink inhalt [QSA] rauslösche gings nur die funktion geht nicht mehr. Ich hab mich in .htaccess in selfhtml.net belesen was was heißt usw.

httpd.conf

156 LoadModule rewrite_module modules/mod_rewrite.so

und

227 <Directory />
228     AllowOverride all
229     Require all denied
230 </Directory>

dieses routing ist wichtig. ich kann sonst nicht weiter machen. Ich hab alles gecheck was man als amateur checken kann aber nix :(. Ich hoffe sehr das meine auszüge hilfreich für euch sind.

vlg MB

  1. Serverfehler!
    
    Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist. Der Server ist entweder überlastet oder ein Fehler in einem CGI-Skript ist aufgetreten.
    
    Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.
    Error 500
    localhost
    Apache/2.4.17 (Win32) OpenSSL/1.0.2d PHP/5.6.15 
    

    Tja. Das ist die nichtssagende Auskunft der Standard-Fehlerseite. Das Error-Log des Apache mal angesehen? Was steht da drin? Die ursprüngliche URL ist auch sehr interessant.

  2. Hallo MB,

    ich hardere schon seit wochen oder monaten damit.

    hadern. Ohne r. ;-)

    Ich hab mich in .htaccess in selfhtml.net belesen was was heißt usw.

    Steht denn bei uns etwas mehr oder anderes drin?

    Bis demnächst
    Matthias

    --
    Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
    1. Hallo Matthias,

      Ich hab mich in .htaccess in selfhtml.net belesen was was heißt usw.

      Steht denn bei uns etwas mehr oder anderes drin?

      Bei euch steht mehr drin als ich für dieses Projekt brauche ;-).

      Was heist den das in deinen Worten:

      • Options +FollowSymLinks
      • RewriteBase url
      • RewriteCond und %{REQUEST_FILENAME} und !-irgendwas
      • RewriteRule und ^(.+)$ index.php?url=$1 und [QSA,L]*** ???????

      ich vermute mal das das Reguläre Audrücke sind ^(.+)$,

  3. Tach!

    Error 500

    Bei einem Fehler 500 muss man immer ins Error-Log schauen, weil da eine genauere Ursache drin stehen kann, als der Server über den öffentlichen Weg preisgeben möchte.

    Manchmal steht da aber auch nichts wirklich weiterführendes drin, à la "premature end of script headers" oder ähnliches.

    wenn ich das klämmersche ink inhalt [QSA] rauslösche gings nur die funktion geht nicht mehr.

    Das riecht sehr danach aus, als ob das PHP-Script irgendein Problem hat und deswegen keine Ausgabe zustande bekommt.

    dedlfix.

    1. Hi dedlfix,

      wenn ich das klämmersche ink inhalt [QSA] rauslösche gings nur die funktion geht nicht mehr. Das riecht sehr danach aus, als ob das PHP-Script irgendein Problem hat und deswegen keine Ausgabe zustande bekommt.

      Interessant. ich hab Matthias nach diesen Befehlen gefragt.

  4. Hast Du da was falsch kopiert? 3x RewriteCond ohne RewriteRule macht keinen Sinn, wenn ich das mod_rewrite richtig verstanden habe. Von der Syntax her sieht das letzte RewriteCond so aus, als müsste es RewriteRule heißen.

    Wenn es dann immer noch qualmt, kommt Dein PHP Script möglicherweise mit der URL nicht klar. QSA bedeutet, dass Query-Parameter aus der ursprünglichen URL mitgenommen werden sollen, ein ?x=y wird dann als &x=y hinten an das Replacement angehängt. Eventuell kommt Dein PHP Script mit speziellen Query-Parametern nicht klar? Schmeiß doch am Anfang mal probehalber ein paar ECHOs mit Debug-Informationen 'rein (oder logge sie mit error_log), die Aufschluss geben, ob du überhaupt im PHP angekommen bist und welche URL dein Script zu sehen bekommt.

    Rolf

    1. Hi Rolf,

      Hast Du da was falsch kopiert? 3x RewriteCond ohne RewriteRule macht keinen Sinn, wenn ich das mod_rewrite richtig verstanden habe. Von der Syntax her sieht das letzte RewriteCond so aus, als müsste es RewriteRule heißen.

      komischerweise funktioniert es jetzt mit deinen änderungen

      Wenn es dann immer noch qualmt, kommt Dein PHP Script möglicherweise mit der URL nicht klar. QSA bedeutet, dass Query-Parameter aus der ursprünglichen URL mitgenommen werden sollen, ein ?x=y wird dann als &x=y hinten an das Replacement angehängt. Eventuell kommt Dein PHP Script mit speziellen Query-Parametern nicht klar?

      klingt einleuchtent. wenn mal sowas wieder passieren sollte was muss ich dann machen? Ich vermute echo in PHP-Script und nicht in .htaccess. Und wo muss ich das dann im script ausgeben? Ich beführchte das das ganze script n Fehler produziert und garnicht erst ausgegeben wird. Daher meine ich nutzt echo nix weil ich diese hübsche Seite mit Servererror und 500 Fehler zu sehen bekomme.

      mfg MB

      1. Komisch ist das nicht; wenn du die Parameter für RewriteRule an den RewriteCond Befehl übergibst dann muss das ja scheppern. Wenn Du dem Metzger sagst: Bitte volltanken - dann fragt der auch nicht "Super oder Diesel" sondern nur "Hä?".

        Deine Frage nach Echo im .htaccess oder .php offenbart ein tiefes Unverständnis der Materie :) Aber zu Anfang ist das immer so.

        ECHO ist ein PHP Befehl der beliebigen Text ins erzeugte HTML setzt und den ich gerne für's einfache Debuggen verwende. Andere machen es vermutlich anders. ECHO kannst Du in der Nähe des Anfangs deines Scripts unterbringen und damit den Inhalt einiger Superglobal-Werte ausgeben, um zu schauen, was genau als URL oder Query-String ankommt. Und an der Stelle, wo das PHP Script die URL interpretiert, kannst Du mit ECHO-Ausgaben feststellen, wie weit es gekommen ist und welche Werte es gerade ermittelt hat.

        Aber deine Fraige zeigt auch, dass Du noch nicht viel PHP kannst, insofern bin ich froh, dass es auf einen falschen Befehl in der .htaccess hinausgelaufen ist.

        Gruß
        Rolf

        1. ECHO ist ein PHP Befehl der beliebigen Text ins erzeugte HTML setzt

          Naja. PHP erzeugt nicht zwingend HTML sondern beliebige, ja sogar binäre Ausgaben. Nennen wir das 'erzeugte HTML' einfach mal den 'Standard-Ausgabe-Kanal' oder '<stdout>'.

        2. Hi Rolf,

          Aber deine Fraige zeigt auch, dass Du noch nicht viel PHP kannst, insofern bin ich froh, dass es auf einen falschen Befehl in der .htaccess hinausgelaufen ist.

          also ein Großmeister wie ihr bin ich bei weitem nicht :-). Aber ich kann mich schon in der klassenorientierter Programmierung und paar design patterns wie factory und MVC, die die "GoF" erstellt haben, bewegen. .htaccess ist, habe ich herausgelesen, von appache.

          Es kann doch sein das .htaccess einen befehl bereitstellt der für andere scripte erreichbar ist wie echo in PHP zur ausgabe von <html>-Code im kontextwechsel. Deswegen meine Frage ;-)

          vlg MB

          1. Hallo,

            .htaccess ist, habe ich herausgelesen, von appache.

            ja, es ist eine Konfigurationsdatei für den Apache-Webserver, die aber nicht global gilt, sondern nur für Zugriffe auf das Verzeichnis, in dem sie sich befindet (und dessen Kinder).

            Es kann doch sein das .htaccess einen befehl bereitstellt der für andere scripte erreichbar ist wie echo in PHP zur ausgabe von <html>-Code

            Wäre denkbar, ist aber nicht so. Direktiven in der .htaccess werden entweder korrekt erkannt und beachtet; im Fehlerfall führen sie aber meistens zu einem 500er-Error.

            Schönes Wochenende,
             Martin

            --
            Es gibt eine Theorie, die besagt, dass das Universum augenblicklich durch etwas noch Komplizierteres und Verrücktes ersetzt wird, sobald jemand herausfindet, wie es wirklich funktioniert. Es gibt eine weitere Theorie, derzufolge das bereits geschehen ist.
            - (frei übersetzt nach Douglas Adams)
            1. Hi Martin,

              .htaccess ist, habe ich herausgelesen, von appache.

              ja, es ist eine Konfigurationsdatei für den Apache-Webserver, die aber nicht global gilt, sondern nur für Zugriffe auf das Verzeichnis, in dem sie sich befindet (und dessen Kinder).

              habe ich so gelesen von euch :-).

              Es kann doch sein das .htaccess einen befehl bereitstellt der für andere scripte erreichbar ist wie echo in PHP zur ausgabe von <html>-Code

              Wäre denkbar, ist aber nicht so. Direktiven in der .htaccess werden entweder korrekt erkannt und beachtet; im Fehlerfall führen sie aber meistens zu einem 500er-Error.

              Danke für den hinweis. Schönes wochenende wünsche ich dir und euch auch.

              vgl MB

          2. Ich würde mich nie als PHP Großmeister bezeichnen. Wenn ich mit PHP etwas mache, geht jeder zweite Blick zu www.php.net. Und ich grübele ständig, ob ein Konstrukt nun C#, C++, Java, JavaScript oder PHP war. Bzw. ob ein SQL nun MS SQL oder MySQL ist.

            1. Ich würde mich nie als PHP Großmeister bezeichnen. Wenn ich mit PHP etwas mache, geht jeder zweite Blick zu www.php.net. Und ich grübele ständig, ob ein Konstrukt nun C#, C++, Java, JavaScript oder PHP war. Bzw. ob ein SQL nun MS SQL oder MySQL ist.

              Ich habe euch bzw. plural ihr gesagt :)

            2. Wenn ich mit PHP etwas mache, geht jeder zweite Blick zu www.php.net.

              Warum auch nicht? Blöd ist, wer bei Zweifeln oder bewusstem Unwissen nicht in die Referenz schaut wenn er sie doch so schön vor der Nase hat.

        3. Tach!

          ECHO ist ein PHP Befehl der beliebigen Text ins erzeugte HTML setzt und den ich gerne für's einfache Debuggen verwende.

          Mehr als einfaches Debuggen geht mit echo aber nicht. Bei Leerstrings und einigen anderen Werten sieht man keine Ausgabe und andere werden "verfälscht" dargestelt (z.B. true als 1, Arrays als "Array"). Für richtiges Debugging ist echo nicht wirklich geeignet. Besser ist var_dump(). Das erzeugt bei allen Werten eine eindeutige Ausgabe.

          dedlfix.

          1. Besser ist var_dump(). Das erzeugt bei allen Werten eine eindeutige Ausgabe.

            mache ich so auch

      2. Hi Rolf,

        Hast Du da was falsch kopiert? 3x RewriteCond ohne RewriteRule macht keinen Sinn, wenn ich das mod_rewrite richtig verstanden habe. Von der Syntax her sieht das letzte RewriteCond so aus, als müsste es RewriteRule heißen.

        komischerweise funktioniert es jetzt mit deinen änderungen

        Kein Wunder. Es geht jetzt, weil es vorher ganz einfach mal falsch war. RewriteCond setzt eine Bedingung, ohne deren Erfüllung (hier: Request zielt nicht auf ein existierendes Verzeichnis und auch nicht auf eine existierende Datei) die nachfolgende RewriteRule nicht abgearbeitet wird. RewriteCond und RewriteRule sind keine Aliase.

        Ich hatte das ("Cond" statt "Rule") heute um 10 vor 5 - also vor dem Kaffee, übersehen weil Du geschrieben hattest, mit QSA wäre es gegangen. Die andere, weitere Änderung hast Du nicht erwähnt. Und in dem Zustand zu der Zeit ohne das Medikament zur Anhebung des Blutdrucks auf "überhaupt messbar" war das "zu weit weg" als das es mir trotz der Täuschung über die tatsächlichen Änderungen hätte auffallen können...

        Eine Frage: Das "vermute" in "ich vermute mal das das Reguläre Audrücke sind" gefällt mir irgendwie ganz und gar nicht. Man kann ja mal was probieren, aber eigentlich sollte ein Programmierer wissen was er da tut...

        1. Kein Wunder. Es geht jetzt, weil es vorher ganz einfach mal falsch war. RewriteCond setzt eine Bedingung, ohne deren Erfüllung (hier: Request zielt nicht auf ein existierendes Verzeichnis und auch nicht auf eine existierende Datei) die nachfolgende RewriteRule nicht abgearbeitet wird. RewriteCond und RewriteRule sind keine Aliase.

          Da stand bei mir auch RewriteRule und nicht RewriteCond. Ich habs falsch raus kopiert. Sry.

          Eine Frage: Das "vermute" in "ich vermute mal das das Reguläre Audrücke sind" gefällt mir irgendwie ganz und gar nicht. Man kann ja mal was probieren, aber eigentlich sollte ein Programmierer wissen was er da tut...

          Ich verstehe deine Bedenken. 'ich vermute mal' ist für mich nur eine floskel die eine ungeprüfte Aussage macht und mehr nich. ich kenne mich in der Serverprogramm scripten in apache gerngfügig aus.

          vlg MB

  5. hallo community,

    ok ich hatte das nicht erwartet das im error.log detailierte infos zum problem stehen. Besten Dank an euch. Hoffe das ich es gelöst und keine weiteren probleme haben werde. DAnke

    Auzug zur übersicht der Fehler in Error.log. Platzhalter .../ in verschiedenen verzeichnissen

    error.log Auszug:

    [Fri Oct 14 14:52:37.856152 2016] [core:alert] [pid 5516:tid 1708] [client ::1:49859] .../.htaccess: RewriteCond: unknown flag 'QSA'
    
    [Fri Oct 14 14:53:43.567910 2016] [core:alert] [pid 5516:tid 1708] [client ::1:49881] C:/xampp/htdocs/CodecourseMVC/public/.htaccess: Invalid command 'RewriteRules', perhaps misspelled or defined by a module not included in the server configuration
    

    gruß Mb