2012-06-07 13 views
19

Kiedy używam .htaccess dla następujących ustawień PHP, otrzymuję 500 Internal Server Error podczas uzyskiwania dostępu do strony internetowej.500 Błąd wewnętrznego serwera podczas korzystania .htaccess dla ustawień PHP

kod w pliku .htaccess:

php_flag display_errors off 
php_flag log_errors on 

Pozwolenie dla pliku .htaccess jest 644

wiem powyżej, że kod jest prawidłowy. Ale kiedy pokazał mi 500 Internal Server Error, próbowałem innego kodu (prawdopodobnie również źle), ale nic nie działało. Różne kod próbowałem to:

php_value display_errors off 
php_value log_errors on 

i

php_value display_errors 0 
php_value log_errors 1 

Co może być przyczyną 500 Internal Server Error?

Po przeczytaniu komentarzy na temat tego pytania, stwierdziłem, że ustawienia PHP na .htaccess nie działają z FastCGI. Tak więc, aby zmienić ustawienia PHP, muszę zmodyfikować php.ini lub muszę to zrobić w kodzie php. Czy istnieje jakiś alternatywny sposób, kiedy nie mam dostępu do modyfikacji pliku php.ini i nie chcę indywidualnie modyfikować wszystkich plików PHP?

+1

Czy masz dostęp do pliku error.log Apache? –

+0

Czy ładuje się strona po usunięciu pliku .htaccess? – Joey

+2

Czy używasz 'mod_php' w konfiguracji Apache? Jeśli korzystasz z PHP poprzez CGI lub FastCGI, nie możesz tego skonfigurować przez '.htaccess'. – lanzz

Odpowiedz

4

Podobnie jak komentarze powyżej powiedział: trzeba uruchomić moduł php jako Dynamic Shared Object aby to działało, jak opisano w Apache PHP Request Hanlding Documentation

rozważań DSO:

libphp zapewnia dyrektyw Apache takich jak PHP_ $ wartość i php_admin_ $ wartość. DSO jest jedyną opcją, w której te dyrektywy będą ważne w plikach .htaccess lub httpd.conf. Gdy te dyrektywy są kompilowane z równoległą łatą DSO, powinny one być nazwane wartościami php4_ $ i php5_ $.

cgi, fcgi, suphp to nie zadziała.

1

Jak się dowiedziałeś, modyfikowanie .htaccess działa tylko z modułem apache, w którym można dodać do dyrektyw, które może zrozumieć apache. To nie zadziała z cgi i innymi.

Sposób php polega na zmodyfikowaniu pliku php.ini dla całej witryny lub modyfikacji go dla każdego katalogu lub dla każdego użytkownika.

Dla php5.5 (nie mam pewności co do innych wersji) zmodyfikuj plik .user.ini, w którym znajduje się katalog, do którego mają obowiązywać te ustawienia. Oczywiście ustawienie tego w katalogu głównym witryny sprawi, że będzie ono dotyczyło całej witryny.

Go tutaj aby uzyskać informacje na .user.ini: http://php.net/manual/en/configuration.file.per-user.php

Go tutaj, aby sprawdzić listę dyrektyw i gdzie mogą być zmienione: http://php.net/manual/en/ini.list.php

Wreszcie, w celu sprawdzenia pliku (prawdopodobnie wymienione w komentarzach), dodaj phpinfo.php (nazwa nie ma znaczenia) plik zawierający

<?php phpinfo() ?> 

do katalogu, dzięki czemu można zobaczyć, jakie ustawienia są skrypty php, które działają w tym katalogu.

Powiązane problemy