Aushandlung der Apache-Datei fehlgeschlagen

23

Ich habe das folgende Problem auf einem Host mit Apache 2.2.22 + PHP 5.4.0

Ich muss die Datei bereitstellen, /home/server1/htdocs/admin/contents.phpwenn ein Benutzer die Anfrage stellt http://server1/admin/contents:, aber ich erhalte diese Meldung auf dem Server error_log.

Negotiation: discovered file(s) matching request: /home/server1/htdocs/admin/contents (None could be negotiated)

Beachten Sie, dass ich mod_negotiationund MultiViews unter den Optionen für den zugehörigen virtuellen Host aktiviert habe:

<Directory "/home/server1/htdocs">
    Options Indexes Includes FollowSymLinks MultiViews
    Order allow,deny
    Allow from all
    AllowOverride All
</Directory>

Ich benutze auch mod_rewrite, mit den folgenden .htaccessRegeln:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^\./]*)$ index.php?t=$1 [L]
</IfModule>

Es scheint sehr seltsam zu sein, aber auf derselben Box mit PHP 5.3.6 hat es früher richtig funktioniert. Ich versuche nur ein Upgrade auf PHP 5.4.0, kann dieses Verhandlungsproblem jedoch nicht lösen. Gibt es eine Idee, warum Apache contents.phpbei der contentAbfrage nicht mithalten kann (was sollte mod_negotiation tun?)?

UPDATE: Ich habe festgestellt, dass sich mod_negotiation bei Dateien mit einer anderen Erweiterung als .php korrekt verhält. Wenn ich also eine Datei mit dem Namen /admin/contents.txt hätte, kann ich über den Browser mit der URL / admin / contents regelmäßig darauf zugreifen. Das Problem ist also nur für PHP-Dateien. Gibt es einen Hinweis darauf, was die Verhandlung zum Scheitern bringen könnte?

lorenzo.marcon
quelle
Wie konfigurierst du mod_negotiation? Benutzt du es?
Mircea Vutcovici
Nun, ich binde mod_negotiation einfach in httpd.conf ein, dann sollten die MultiViews-Optionen in VirtualHost ausreichen, um das zu tun, wonach ich suche, soweit ich weiß, nicht wahr?
Lorenzo.marcon
3
FWIW, ich hatte dieses Problem mit +MultiViewsaktiviert, und es verschwand beim Deaktivieren.
Felix Frank

Antworten:

39

Ich habe die Lösung gefunden. Sehr einfach. Ich habe folgendes vergessen:

AddType application/x-httpd-php .php

in Apache mod_mime Abschnitt in httpd.conf

Die Tatsache, dass PHP-Skripte korrekt funktionierten, hat mich in die Irre geführt. Die Aushandlung schlug jedoch fehl, da mod_negotiation nur nach "interessanten" (und bekannten) Dateitypen sucht.

lorenzo.marcon
quelle
3
Dies! Das hier richtig! Verbrachte den größten Teil der Nacht damit, nach dem Grund zu suchen, warum ich den sehr wenig hilfreichen Fehler "Discovered File (s) / None Negotiated" erhielt. Skripte hatten zuvor einwandfrei funktioniert, und ich hatte eine gewisse Zeit damit zu kämpfen, dass der Typ in der Distribution, auf der ich testete, nicht in mod_mime enthalten war. Ich schulde Ihnen ein Bier, Sir.
Akoi Meexx
Ich nehme gerne dein Bier an, wenn ich in die USA komme :)
lorenzo.marcon
das funktioniert einwandfrei !! @ lorenzo.marcon danke für die frage und antwort!
Rogcg
Das muss sich irgendwann geändert haben. Ich bin mir ziemlich sicher, dass ich dies nicht früher hinzufügen musste, damit PHP MultiViews funktioniert.
user1338062
Vielen Dank eine Tonne! Ich schlug meinen Kopf gegen die Wand und fragte mich, warum mein Umschreiben von search /? $ Zu search.php nicht funktionierte. Anscheinend hat das Verhandlungsmodul Vorrang vor dem Umschreibemodul, was allgemein gut zu wissen ist.
zıəs u18s
12

Ich hatte das gleiche Problem nach dem Update von Debian Squeeze auf Wheezy. Das mods-enabled/mime.confschließt die bekannten Dateitypen aus dem System ein:

TypesConfig /etc/mime.types

Das Problem war, dass die /etc/mime.typesDatei durch das Update ersetzt wurde und in der ersetzten Datei der PHP-Teil auskommentiert wurde. Als ich danach suchte, fand ich:

#application/x-httpd-php                        phtml pht php
#application/x-httpd-php-source                 phps
#application/x-httpd-php3                       php3
#application/x-httpd-php3-preprocessed          php3p
#application/x-httpd-php4                       php4
#application/x-httpd-php5                       php5

Ich musste #aus jeder Zeile, die PHP-relevantes Zeug enthielt , das entfernen , dann den Apache-Webserver speichern und neu starten. Dadurch wurde das Problem behoben, ohne dass die mime.confDatei geändert wurde .

derHippeChip
quelle
Dies hat mich nach 4 Stunden endlosen Debuggens gegen einen Geist gerettet.
MarkSkayff
Beachten Sie, dass dies dazu führen kann, libapache-mod-php5dass Dateien mit .phpdem Namen (like filename.php.jpeg) ausgeführt werden, der die ursprüngliche Begründung für das Auskommentieren war. Siehe bugs.debian.org/589384
Kevinoid