Mam następujący problem na hoście korzystającym z Apache 2.2.22 + PHP 5.4.0
Muszę dostarczyć plik, /home/server1/htdocs/admin/contents.php
gdy użytkownik http://server1/admin/contents
wysyła żądanie :, ale otrzymuję ten komunikat na serwerze dziennik błędów.
Negotiation: discovered file(s) matching request: /home/server1/htdocs/admin/contents (None could be negotiated)
Zauważ, że mam mod_negotiation
włączone i MultiViews wśród opcji dla powiązanego wirtualnego hosta:
<Directory "/home/server1/htdocs">
Options Indexes Includes FollowSymLinks MultiViews
Order allow,deny
Allow from all
AllowOverride All
</Directory>
Korzystam również mod_rewrite
z następujących .htaccess
zasad:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\./]*)$ index.php?t=$1 [L]
</IfModule>
Wydaje się to bardzo dziwne, ale działało poprawnie na tym samym pudełku z PHP 5.3.6. Właśnie próbuję uaktualnić do PHP 5.4.0, ale nie mogę rozwiązać tego problemu negocjacyjnego. Każdy pomysł na to, dlaczego Apache nie może się równać, contents.php
gdy pyta content
(co powinno być tym, co powinna zrobić mod_negotiation)?
AKTUALIZACJA: Zauważyłem, że mod_negotiation działa poprawnie z plikami o rozszerzeniu innym niż .php: więc jeśli miałbym plik o nazwie /admin/contents.txt, mogę uzyskać do niego regularny dostęp za pomocą przeglądarki z / admin / content url. Problem dotyczy tylko plików php. Wszelkie wskazówki, co może sprawić, że negocjacje się nie powiodą?
źródło
+MultiViews
włączeniem i zniknął po wyłączeniu.Odpowiedzi:
Znalazłem rozwiązanie. Rzeczywiście bardzo łatwe. Zapomniałem dołączyć następujące informacje:
do sekcji mod_mime apache do httpd.conf
Byłem wprowadzony w błąd przez fakt, że skrypty php działały poprawnie; jednak negocjacja nie powiodła się, ponieważ mod_negotiation szuka tylko „interesujących” (i znanych) typów plików.
źródło
Miałem ten sam problem po aktualizacji z Debian Squeeze do Wheezy.
mods-enabled/mime.conf
Obejmuje znanych typów plików z systemu:Problem polegał na tym, że
/etc/mime.types
plik został zastąpiony przez aktualizację, aw zastąpionym pliku część PHP została skomentowana. Podczas szukania znalazłem:Musiałem usunąć
#
z każdego wiersza zawierającego rzeczy związane z php, a następnie zapisać i zrestartować serwer WWW Apache. To rozwiązało problem bez modyfikowaniamime.conf
pliku.źródło
libapache-mod-php5
pliki.php
zostaną wykonane w nazwie (jakfilename.php.jpeg
), co było oryginalnym uzasadnieniem ich komentowania. Zobacz bugs.debian.org/589384Zamiast mapowania
.php
na typ nośnika (który może mieć wpływ na bezpieczeństwo, jak opisano w Debian Bug 589384, który je wyłączył), możesz skonfigurowaćMultiviewsMatch
dopasowanie plików bez typu.php
, jak sugeruje odpowiedź Marka na podobne pytanie :źródło