2015-04-17 10 views
20

interpretiert zu werden habe ich diese auf meine .htaccess-Datei:Make-Dateierweiterung von PHP

AddHandler fcgid-script .test 

(Ich bin mit FastCGI/Virtualmin/WebMin)

Und crated eine Test.Test Datei mit die Inhalte;

<?php echo "test"; ?> 

Dies führt zu einem internen Server-Fehler und diese Meldung im Fehlerprotokoll:

[Thu Apr 16 14:12:57.631287 2015] [fcgid:warn] [pid 2646] (104)Connection reset by peer: [client xxxx:53595] mod_fcgid: error reading data from FastCGI server 
[Thu Apr 16 14:12:57.631402 2015] [core:error] [pid 2646] [client xxxx:53595] End of script output before headers: test.test 

Was mache ich falsch? Ich habe versucht, verschiedene Handler namens wie x-httpd-php oder x-httpd-php5, aber das tut überhaupt nichts.

ich auch versucht:

<FilesMatch "\.test$"> 
    SetHandler fcgid-script 
</FilesMatch> 

aber es hat die gleichen internen Serverfehler.

+0

"Ende der Skriptausgabe vor den Überschriften" - müssen Sie vielleicht einige Überschriften definieren, um den Dateityp zu definieren? – MilanG

+0

@MilanG Wie ich sehen kann, gibt es 2 Fehlermeldungen im Protokoll, und die zweite (_ "Skriptende Ausgabe vor den Headern" _) ist wahrscheinlich nur die Konsequenz der ersten. – mcserep

+0

CGI-Skript muss eine Anwendung sein dh die erste Zeile muss '#!/Usr/bin/php' (Pfad zum Interpreter) sein – Deadooshka

Antwort

2

getestet und überprüft zu arbeiten:

Weil Sie erwähnten Sie Webmin verwenden, zugeschnitten ich meine Antwort für Webmin. Sie können dies tun, indem Sie die Konfiguration von Apache über die Shell bearbeiten.

Ich werde beachten Sie, dass es im Allgemeinen bevorzugt ist Apache-Konfiguration, und in diesem Fall wahrscheinlich unvermeidbar, zu bearbeiten, wie ich Ihnen nicht glaube, dass diese Art bearbeiten machen können in .htaccess. Obwohl es einen Hack gibt, mit dem ich nicht vertraut bin, würde ein Serveradministrator dies wahrscheinlich in der Apache-Konfiguration behalten wollen. Gedanken von .htaccess Dateien mit Rogue-Dateierweiterungen, die pro Verzeichnis herumfliegen, klingen nicht nur langsam, sondern auch höchst unsicher.

Schritte

ich Apache auf Ubuntu 14.04 durch VirtualBox installiert. Ich habe Webmin und FastCGI hinzugefügt.

Ich nahm die folgenden Schritte:

  1. Log in Webmin, um Ihren virtuellen Host gehen.
  2. Klicken Sie auf Richtlinien bearbeiten
  3. Folgendes an der Unterseite hinzufügen:

<Directory /> 
    #Your SetHandler script here 
    #(@MrTux's script works here but NOT IN .htaccess) 

    Require all granted 
</Directory> 
  1. Speichern Klicken Sie auf
  2. Klicken Sie auf "Änderungen übernehmen" oben.
  3. Sie sind fertig!

Ich werde beachten Sie, dass SetHandler einige Header übergibt, so dass, wenn Sie dies in .htaccess erklären gibt es eine Chance, dass Header bereits gesendet worden, das ist, was Ihr Fehler auslöst. Auch hier ist .htaccess nicht die bevorzugte Methode zum Festlegen von Regeln, wenn Sie die Kontrolle über Ihr System haben. In diesem Fall würde es wahrscheinlich trotzdem Sicherheitsprobleme verursachen.

+0

IIRC 'application/x-httpd-php' arbeitet mit mod_php, siehe https : //httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#examples als Beispiel für mod_fastcgid – MrTux

+0

Danke, bearbeitet. – smcjones

6

Es scheint, als ob das FastCGId-Modul nicht wissen, wie Sie Ihr Skript ausführen - die FcgidWrapper-Direktive scheint zu fehlen (da Ihr PHP-Skript kein Shebang hat).

Je nach Ihrer Distribution müssen Sie es manuell einrichten oder Sie können die vorhandene Direktive anpassen, die bereits .php-Dateien verarbeitet, um auch .test-Dateien zu verarbeiten (Normalerweise sollte dies mit der "SetHandler fcgid-script" -Direktive geschehen Setzen/Duplizieren der FcgidWrapper-Direktive).

Adjusted Beispiel (aus https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#examples):

<FilesMatch "\.test$"> 
    AddHandler fcgid-script .test 
</FilesMatch> 
Options +ExecCGI 
FcgidWrapper /usr/bin/php5-cgi .test 

Weitere Informationen und Beispiele: https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#examples und http://tltech.com/info/php-on-fcgid/

Andere Probleme basierend auf Berechtigungen werden könnten, beispielsweise Wenn Sie suexec verwenden, kann der Prozess fastcgid nicht in die Protokolle schreiben oder das Wrapper-Skript nicht ausführen. Hier wäre es sehr hilfreich, wenn Sie angeben könnten, ob normale .php-Dateien ordnungsgemäß ausgeführt werden.

+0

Ja, normale PHP-Dateien (mit FCGI) funktionieren einwandfrei. Ich verwende die Standardkonfiguration von webmin/virtualmin, wenn Sie eine Site hinzufügen. – Wesley

2

Versuchen Sie dies in Ihrer .htaccess Datei

AddType application/x-httpd-php .test 

Sehen Sie diesen Stack-Überlauf Frage zu verwenden: Problem with Executing CGI Scripts on Apache.

+0

Sie sollten sich bewusst sein, dass diese Methode unsicher ist, da Apache ".test" sowie alles, was '.test' im Namen hat (d. H.' .test.bad'), mit ".test" übereinstimmt. Dies ist der Grund, warum ' 'besser ist, weil es eine Regex verwendet, um sicherzustellen, dass nur die angegebenen Dateien ausgeführt werden. – Machavity

+0

IIRC 'application/x-httpd-php' arbeitet mit mod_php, siehe https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#examples als Beispiel für mod_fastcgid – MrTux

0

Ich bin kein Fastcgi-Typ. I googled das Problem. Ich habe 2 ähnliche Probleme in virtualmin veröffentlicht. Ich füge nur die Antwort an, die dort gepostet wird.

https://www.virtualmin.com/node/34903

  1. gehen zu Virtualmin \ virtuelle Server \ Serverkonfiguration \ Website Optionen \
  2. wählen "Apache mod_php (ausgeführt als Apache-Benutzer)", dann
  3. Schalter speichern zurück "fcgid (als virtueller Server Besitzer laufen)" (es fordert Sie CGI-Skripte als Domain-Inhaber Run)
  4. Speichern

https://www.virtualmin.com/node/25539

Zum/home/Site-Name/fcgi-bin Verwenden Sie den Befehl follpwoing durch die immutable

"chattr -i php5.fcgi"

zurücksetzen Löschen Sie dann die Verzeichnisse/home/sitename/etc und/home/sitename/fcgi-bin (stellen Sie sicher, dass alles, was nicht in php verwandt ist, gespeichert wird) Verwenden Sie virtualmin zurück zu Apache mod_php Modus und t zurück zum FCGId-Modus. Die Seite sollte jetzt nicht arbeiten zu Chown alle Dateien/Verzeichnisse in public_html vergessen, die Apache waren: Beachten Sie, dass diese sind beide in der Regel die Site-Namen.

Ich hoffe, es wird Ihnen helfen.

0

Ich frage die fcgid-script Handler. Das ist kein normaler PHP-Handler, auch nicht für FCGI. Normalerweise würden Sie

<FilesMatch "\.test$"> 
    SetHandler application/x-httpd-php 
</FilesMatch> 

Oder

<FilesMatch "\.test$"> 
    SetHandler php5-fcgi 
</FilesMatch> 

Wenn keines dieser Werke sehen, prüfen Sie, PHP FCGI machen installiert ist.

+1

IIRC' application/x-httpd- php' funktioniert nur mit mod_php, siehe https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#examples als Beispiel für mod_fastcgid – MrTux

0

Alle CGI-Skripte erfordern, dass Sie die Shebang-Zeile am Anfang des Skripts hinzufügen.

Also, wenn Sie PHP ausführen möchten Sie etwas aufgenommen haben sollte:

Am Anfang des Skripts es funktioniert