Internal Server Error -virheet
Verkkosivujen virhe 500 Internal Server Error tarkoittaa ongelmaa joko .htaccess-asetuksissa tai CGI- tai PHP-ohjelman suorituksessa. Tämä ohje neuvoo virhetilanteen selvittämisessä.
Virheet .htaccess-asetuksissa
Piilotiedosto .htaccess sisältää www-palvelinohjelman toimintaan vaikuttavia asetuksia. Syntaksivirheet tai asetukset, joille ei ole tukea, aiheuttavat virheilmoituksen. Tästä on kyse, jos virheilmoitus ilmenee muulloinkin kuin CGI- tai PHP-sivuja käytettäessä.
Useimmiten .htaccess-asetukset ovat käyttäjän itse tekemiä. Joidenkin ohjelmien asennuspaketeissa tulee kuitenkin valmiina asetustiedosto, jonka kaikki asetukset eivät välttämättä toimi Kapsilla. Tiedoston saa näkyviin komennolla ls -a, ja sitä voi lukea tavallisella tekstieditorilla.
Virheen syy ilmenee error.log-tiedostosta. Erityisen yleinen syy on FollowSymLinks-asetus. Se on korvattu turvallisemmalla FollowSymLinksIfOwnerMatch-asetuksella, joka on oletuksena käytössä. Kyseisen asetuksen voi siis poistaa .htaccess-tiedostosta.
PHP-ohjelmien virheet
PHP-ohjelmien virheet löytyvät error.log-tiedostosta.
CGI-ohjelmien virheet
CGI-ohjelmien virhetilanteissa error.log:in virheilmoitus on usein pelkkä Premature end of script headers. Se tarkoittaa ettei ohjelma tuottanut kunnollista vastausta sivuhakuun. Virhe voi johtua esimerkiksi ohjelman kaatumisesta, tai siitä että SuEXEC estää ohjelman suorituksen käyttöoikeuksien vuoksi.
Käyttöoikeudet
SuEXEC on www-palvelimen ominaisuus, joka suorittaa sovellukset käyttäjän omalla käyttäjätunnuksella. Tietoturvan vuoksi SuEXECissä on varsin tiukat rajoitukset käyttöoikeuksille, eikä ohjelmaa suoriteta jos rajoitukset eivät täyty.
Muut kuin UNIX-rivinvaihdot
Muut kuin UNIX-muotoiset rivinvaihdot aiheuttavat virheen End of script output before headers.
Tekstitiedostot täytyy siirtää käyttäen tiedonsiirto-ohjelman tekstimuoto-toimintoa (ascii) tai varmistaa sed-komennolla että niiden sisältämät rivinvaihdot ovat UNIX-muotoisia:
sed -i $'s/\r$//' tiedosto.cgi
Muiden virheiden selvittäminen wrap.cgi:llä
Muut Premature end of script headers -virheet voi selvittää luomalla samaan hakemistoon wrap.cgi-tiedoston. Tällä ohjataan ohjelman tuottamat virheilmoitukset selaimelle.
#!/bin/bash echo -e "Content-type: text/plain\r\n\r\n" ./ohjelma.cgi 2>&1
Wrap.cgi:lle annetaan suoritusoikeus ja se avataan selaimessa. Ohjelman tuloste tulee näkyviin, eli joko kunnollinen vastaus tai jokin virheilmoitus esimerkiksi puuttuvasta kirjastosta. Menetelmä ei kuitenkaan sovi FCGI-ohjelmille (PHP).