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.php
wenn 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_negotiation
und 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 .htaccess
Regeln:
<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.php
bei der content
Abfrage 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?
quelle
+MultiViews
aktiviert, und es verschwand beim Deaktivieren.Antworten:
Ich habe die Lösung gefunden. Sehr einfach. Ich habe folgendes vergessen:
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.
quelle
Ich hatte das gleiche Problem nach dem Update von Debian Squeeze auf Wheezy. Das
mods-enabled/mime.conf
schließt die bekannten Dateitypen aus dem System ein:Das Problem war, dass die
/etc/mime.types
Datei durch das Update ersetzt wurde und in der ersetzten Datei der PHP-Teil auskommentiert wurde. Als ich danach suchte, fand ich: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 diemime.conf
Datei geändert wurde .quelle
libapache-mod-php5
dass Dateien mit.php
dem Namen (likefilename.php.jpeg
) ausgeführt werden, der die ursprüngliche Begründung für das Auskommentieren war. Siehe bugs.debian.org/589384Anstatt
.php
einem Medientyp zuzuordnen (was Auswirkungen auf die Sicherheit haben kann, wie in Debian Bug 589384 beschrieben, der sie deaktiviert hat), können Sie festlegen , dassMultiviewsMatch
Dateien ohne Typ für abgeglichen werden.php
, wie in Mark Amerys Antwort auf eine ähnliche Frage vorgeschlagen :quelle