Tengo el siguiente problema en un host que usa Apache 2.2.22 + PHP 5.4.0
Necesito proporcionar el archivo /home/server1/htdocs/admin/contents.php
cuando un usuario realiza la solicitud: http://server1/admin/contents
pero obtengo este mensaje en el servidor error_log.
Negotiation: discovered file(s) matching request: /home/server1/htdocs/admin/contents (None could be negotiated)
Tenga en cuenta que he mod_negotiation
habilitado y MultiViews entre las opciones para el host virtual relacionado:
<Directory "/home/server1/htdocs">
Options Indexes Includes FollowSymLinks MultiViews
Order allow,deny
Allow from all
AllowOverride All
</Directory>
También uso mod_rewrite
, con las siguientes .htaccess
reglas:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\./]*)$ index.php?t=$1 [L]
</IfModule>
Parece muy extraño, pero en el mismo cuadro con PHP 5.3.6 solía funcionar correctamente. Solo estoy intentando una actualización a PHP 5.4.0, pero no puedo resolver este problema de negociación. ¿Alguna idea de por qué Apache no puede coincidir contents.php
cuando se solicita content
(que debería ser lo que se supone que debe hacer mod_negotiation)?
ACTUALIZACIÓN: Noté que mod_negotiation se comporta correctamente con archivos con una extensión diferente a .php: así que si tuviera un archivo llamado /admin/contents.txt, puedo acceder regularmente con el navegador con / admin / contents url. Entonces, el problema es solo para los archivos php. ¿Alguna pista sobre qué podría hacer fracasar la negociación?
fuente
+MultiViews
habilitado, y desapareció al deshabilitarlo.Respuestas:
Encontré la solución. Muy fácil, de hecho. Olvidé incluir lo siguiente:
en la sección apache mod_mime en httpd.conf
Me engañó el hecho de que los scripts php funcionaban correctamente; sin embargo, la negociación estaba fallando porque mod_negotiation solo busca tipos de archivos "interesantes" (y conocidos).
fuente
Tuve el mismo problema después de actualizar Debian Squeeze a Wheezy. La
mods-enabled/mime.conf
incluye los tipos de archivos conocidos del sistema:El problema fue que el
/etc/mime.types
archivo fue reemplazado por la actualización y en el archivo reemplazado, la parte PHP fue comentada. Al buscarlo, encontré:Tuve que eliminar el
#
de cada línea que contenía material relevante para php, luego guardar y reiniciar el servidor web Apache. Eso resolvió el problema sin modificar elmime.conf
archivo.fuente
libapache-mod-php5
ejecuten archivos con.php
el nombre (comofilename.php.jpeg
), que era la razón original para comentarlos. Ver bugs.debian.org/589384En lugar de asignar
.php
a un tipo de medio (que puede tener implicaciones de seguridad, como se describe en Debian Bug 589384 que los deshabilitó), puede configurarMultiviewsMatch
para que coincidan los archivos sin un tipo.php
, como se sugiere en la respuesta de Mark Amery a una pregunta similar :fuente