Tere vaan kaikille,
Ne, jotka olivat keskiviikon 5.3. luennolla kuulivat muutamista ongelmista, jotka liittyvät esimerkiksi CakePHP:n, symfony:n ja muiden, ainakin PHP-kielisten sovelluskehysten käyttöönotton ensiaskeliin.
Ongelma
Ongelma ilmenee siten, että kehittäjä saa 404 vastauksen, vaikka yrittää kuinka kirjoittaa URL:in. Esivaatimuksena tähän on omien kokemuksieni perusteella se, että yrittää käyttää sovelluskehystä kotihakemistonsa public_html hakemistosta, eikä omalta virtuaalipalvelimelta tai palvelimen juuresta (esim. /var/www/).
Syy tähän löytyy siitä, että useimmat sovelluskehykset olettavat, että niitä käytetään (virtuaali)palvelimen juuresta. Ongelma on kuitenkin ainakin CakePHP 1.1 ja 1.2 sekä symfonyn kanssa nopeasti ratkaistavissa.
Ratkaisu
Kun olet purkanut valitsemasi sovelluskehyksen paketin esimerkiksi hakemistoon $HOME/public_html/projekti, avaa kyseisen hakemiston juuresta löytyvä .htaccess tiedosto jollain tekstieditorilla.
CakePHP 1.1.* tapauksessa sieltä löytyy seuraavaa:
1 <IfModule mod_rewrite.c>
2 RewriteEngine on
3 RewriteRule ^$ app/webroot/ [L]
4 RewriteRule (.*) app/webroot/$1 [L]
5 </IfModule>
Lisää rivin kaksi jälkeen rivi:
ReWriteBase /~<käyttäjätunnuksesi>/projekti
Joka kertoo mod_rewrite enginelle että kaikkia tämän hakemistorakenteen alle tehtäviä URL:ja muokattaessa on lisättävä alkuun tämä URL. Huomatkaa että parametri alkaa kenoviivalla (”/”).
Jos unohdat kenoviivan alusta, saat todennäköisimmin 500 Internal server errorin, joka tulee mod_rewriteltä.
Täysin sama “kikka” (ei oikeastaan, vaan täysin dokumentoitu ominaisuus) toimii melko varmasti muidenkin sovelluskehysten kanssa.
Ei toimi vieläkään?
Mikäli ongelmat jatkuu, etsi käsiisi käyttämäsi http-palvelimen virheloki.
Ainakin apache2:sen tapauksessa vakioasetuksena taitaa olla /var/log/apache2/error.log ja sieltä tarkistaa joko viimeiseltä riviltä tai jaetulla koneella viimeiseltä riviltä, jonka sinun kone on sinne aiheuttanut (cat error.log | grep <oma-ip-osoitteeni> | tail).
Logiriviltä voit päätellä tiedoston/hakemiston jota apache oikeasti yrittää hakea. Mikäli et pääse käsiksi palvelimen error.logeihin niin yritä saada mod_rewriten oma loggaustoiminto toimimaan.
Lisäksi kannattaa varmaan kommenttia pistää tähän blogimerkintään ja korjataan/laajennetaan tätä tekstiä sitä mukaan kun ratkaisuja keksitään! Älkää pastetko mitään pitkiä virheilmoituksia vaan käyttäkää pastebin -tyylisiä ratkaisuja.
Tuoreimmat kommentit
RSS