Tässäpä kokeilin saada nettisivujeni osoitteet yksinkertaisempaan muotoon Rewrite engineä käyttämällä. Idea olisi siis saada osoite www.example.com?sivu=joku muotoon www.example.com/joku. Apuna käytin Folion esimerkkiä, joka löytyy osoitteesta
https://www.ohjelmointiputka.net/keskustelu/
ja menee jotakuinkin näin:
.htaccess
RewriteEngine On RewriteRule ^([a-z0-9_\/]+)(\/*)$ /index.php$1
Ja index.php tutkii sitten $_SERVER['QUERY_STRING']-muuttujan ja päättelee sitten, mikä sivu pitäisi ladata. Päättely tehdään tutkimalla moniulotteista taulukkoa, johon on tallennettu kunkin "moduulin" nimi ja todellinen sijainti. Jos moduuli sitten löytyy, laitetaan se includen avulla paikalleen.
Ongelma on nyt sellainen, että jos kirjoitan vaikkapa http://localhost/jasenet ja moduulitaulukosta löytyy moduuli jasenet, jonka sijainti on inc/jasenet/index.php, selain valittaakin, ettei kansiota "jasenet" löydy. Toisaalta jos kirjoitan http://localhost/kuvagalleria, kaikki sujuu hyvin ja kuvagalleria näkyy, vaikka se on moduuli yhtälailla ja sijaitsee palvelimella polussa inc/kuvagalleria/index.php...
Mikäs ihme tässä nyt oikein on? Minun nähdäkseni joku toimii nyt epäloogisesti, vaikka se on täysin tietokoneen toimintaperiaatteiden vastaista :)
Onko juuressa "jasenet" niminen kansio? Toimiiko localhost/jasenet/
Juuressa oli jasenet-niminen kansio, mutta poistin sen, kun huomasin selaimen menevän sinne. Asialla ei kyllä ollut mitään vaikutusta mihinkään, kuten ei myöskään osoitteen lopussa olevalla kauttaviivalla, kuten jo RewriteRulestakin näkyy. Jostain syystä pelkästään tuo kuvagalleria näkyy, ja juuressa kyllä oli myöskin "kuvagalleria"-niminen kansio, jonka sitten siirsin polkuun inc/kuvagalleria.
Jos sitten muutankin tuon jasenet-moduulin osoitteen muotoon localhost/kakka (siis muutan moduulin nimeä, mutta todellinen polku pysyy samana), kaikki toimii loistavasti, koska minulla ei ole eikä ole ollutkaan juuressa "kakka"-nimistä kansiota. En kuitenkaan hankkinut RewriteEngineä voidakseni tehdä osoitteista mahdollisimman epäloogisia.
Itse olen käyttänyt tapaa jossa kaikki "moduulit" ovat pages kansiossa, kukin omassa tiedossaan (esim. jasenet.php). Ja kaikkiin oikeasti palvelimella olevista kansioista olen ottanut rewrite:n pois, ja tilalla on useimmiten hakemiston selaamisen estävä määre.
On toki olemassa monta muutakin tapaa käyttää rewite-mokkulaa.
http://wiki.mureakuha.com/wiki/.htaccess#Rewrite
http://www.pikseli.biz/blog/archive/2003/10/21/
Tuttuja oppaitahan nuo olivat - on tullut lueksittua. Selvyyttä asiaan ei tullut, vaikka muutinkin .htaccessini mureakuhan esimerkin mukaan. Kokeilin uudelleenohjata tiedostoon kansio.foo, mikäli URL viittaisi palvelimella olevaan todelliseen kansioon, ja kokeilin localhos/jasenet mutta ei: uudelleenohjausta ei tapahtunut, ja Apassi heitti vaan Error 404:ää silmille.
Liekö vika palvelimessa (Apache2) tai käyttiksessä(Ubuntu 5.10), mutta minä luovutin ja nimesin moduulit uudelleen. Nyt kaikki toimii kuin hirvi, mutta kumma juttu tuo silti on. Jos joku tietää, mistä johtuu, niin saa sanoa.
Ongelma taisi ratketa. Syy oli niinkin yksinkertainen kuin Linuxin tallentamat tiedostojen edelliset versiot :) Juuresta löytyi tiedosto jasenet.php~, joka ilmeisestikin oli sotkun aiheuttaja. Kun pistin deleteä sille, rupesi hommat pelittämään. Hassua, että Apache ei heittänyt tiedostoa näkyviin, mutta kuitenkin rekisteröi sen olemassaolon.
Kiitoksia Foliolle hyvistä yrityksistä :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.