Kapsin logo

Kapsi Internet-käyttäjät ry

Uudelleenohjaukset mod_rewrite:llä

Apachen mod_rewrite-laajennoksella on mahdollista toteuttaa erilaisia uudelleenohjauksia www-sivuilla. Tässä ohjeessa on esimerkkejä yleisimpiin tapauksiin sopivista rewrite-säännöistä.

Kaikki seuraavat asetukset tehdään .htaccess-tiedostoon, jonka hakemisto valitaan tilanteen mukaan. Kyseistä tiedostoa ei edes käsitellä, ellei osoite ilman uudelleenohjausta viittaisi kyseiseen hakemistoon, joten esimerkiksi alidomainit tulee määritellä www-hakemiston juuressa.

Jotta mod_rewriteä voi käyttää, on .htaccess-tiedoston alkuun lisättävä seuraavat rivit. Jälkimmäiseltä riviltä muutetaan polku osoitteessa verkkotunnuksen jälkeiseksi osaksi (esim. jos .htaccess-tiedosto on osoitteessa http://koti.kapsi.fi/käyttäjä/hakemisto/.htaccess, on polku /käyttäjä/hakemisto). Juurihakemiston polku on / (pelkkä kauttaviiva).

RewriteEngine On
RewriteBase /polku

RewriteRule-sääntöjen ensimmäinen osa on regexp-lauseke. Regexpissä piste tarkoittaa mitä tahansa merkkiä, joten on suositeltavaa lisätä pisteiden eteen kenoviiva estämään tämä. Muuten esimerkiksi teksti index.php täsmäisi myös nimeen index-php.

Uudelleenohjaus toiseen osoitteeseen

Yksittäisestä tiedostosta toiselle nimelle:

RewriteRule nimi1\.html$ nimi2.html [R]

Yksittäisestä tiedostosta ulkoiseen osoitteeseen:

RewriteRule tiedosto\.html$ http://domain.com/tiedosto.html [R]

Kaikki kansion tiedostot vastaavilla nimillä ulkoiseen osoitteeseen:

RewriteRule ^(.*)$ http://domain.com/$1 [R]

Jos uudelleenohjauksen ei halua näkyvän selaimen osoiterivillä, voi paikallisissa ohjauksissa jättää lopusta tekstin "[R]" pois.

URL-osoitteiden siistiminen

Dynaamisia sivuja varten käytetään usein yhtä tiedostoa, esimerkiksi index.php, jolle sivun nimi välitetään parametrina. Seuraava sääntö muuttaa esimerkiksi osoitteen etusivu.html php-skriptiä varten muotoon index.php?page=etusivu:

RewriteRule ^(.*)\.html$ index.php?page=$1

Toinen tapa on ohjata alihakemistot suoraan php-ohjelman perään, jolloin polku on luettavissa muuttujasta $_SERVER['PATH_INFO'].

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1    

Erilliset sivut alidomainille

Kapsin ylläpidolta voi pyytää ns. staattisen alidomainin, jolle saa siten muusta domainista erilliset sivut. Ylläpito luo alidomainin sivuja varten hakemiston ~/sites/alidomain.domain.com/www, kuten itse domainillekin on luotu. Katso lisää domain-ohjeesta. Jos kuitenkin haluat hallita alidomainejasi itse, onnistuu se mod_rewrite:n avulla.

Jotta alidomainin luominen itse olisi mahdollista, on osoitteen jo valmiiksi ohjattava domainin sivuille. Ohjautuvuus on helppo testata selaimella: Mikäli saat domain.com:n sivut, kaikki on kunnossa. Jos taas saat virheilmoituksen, täytyy ylläpidon lisätä nimipalveluihin tai www-palvelimeen sopiva ohjaus. Mikäli nimipalvelusi ovat Kapsilla, voit pyytää ylläpidolta ohjauksen *.domain.com -> domain.com. Muiden palveluntarjoajien hallintatyökaluissa tämä on usein nimellä "wildcard".

Seuraava sääntö näyttää domainia alidomain.domain.com varten sivut hakemistosta alidomain (joka täytyy luonnollisesti luoda itse):

RewriteCond %{HTTP_HOST} ^alidomain\.domain\.com
RewriteCond %{REQUEST_URI} !^/php5.fcgi
RewriteCond %{REQUEST_URI} !^/alidomain/
RewriteRule ^(.*)$ /alidomain/$1 [L]

Alidomainin uudelleenohjaus

Pelkän uudelleenohjauksen alidomainia varten voi luoda seuraavasti:

RewriteCond %{HTTP_HOST} ^alidomain\.domain\.com
RewriteRule ^(.*)$ http://www.ohjatutsivut.com/$1 [R]

Sovelluspalvelimet

Ensisijaisesti suositellaan FastCGI:n tai CGI:n käyttämistä. Sovelluspalvelimia on kuitenkin mahdollista käyttää tarvittaessa.

Sovelluspalvelimen (eli sovelluksen oman HTTP-palvelimen) voi käynnistää jollekin palvelimista lakka, kirsikka, karviainen, suomuurain. Portiksi tulee valita jokin väliltä 30000–40000 satunnaisesti. Jos portti ei ole vapaana, valitse uusi. Sovelluspalvelimen voi käynnistää cronista @reboot aikamääritteellä, jolloin se käynnistyy automaattisesti jos palvelin uudelleenkäynnistetään. Sovelluspalvelimen saa näkyviin Internetiin lisäämällä .htaccessiin ohjauksen sovelluspalvelimelle Kapsin sisäverkossa, esimerkiksi seuraavasti:

  RewriteEngine On
  RewriteRule ^(.*)$ http://lakka.n.kapsi.fi:PORTTI/$1 [P]

Osoite lakka.n.kapsi.fi korvataan sillä osoitteella, jossa oma sovelluspalvelin on käytössä. PORTTI pitää korvata itse valitulla. Osoitteessa oleva .n. tarkoittaa Kapsin Nebulan salin sisäverkon osoitetta, johon ei julkisen Internetin kautta pääse.

Huomaathan, että sinun itse huolehdittava itse asennettujen sovelluksen päivitysten seuraamisesta ja asentamisesta! Älä luota myöskään siihen, että sovelluspalvelimeltasi ei voisi ladata muita sivuja kuin olet rewritella sallinut, sillä palvelimilla on tuhansia muita paikallisia käyttäjiä.

Jotta Djangon tekemät edelleenohjaukset toimisivat oikein, tulee djangon asetuksiin lisätä USE_X_FORWARDED_HOST = True. Tällöin sovelluspalvelin käyttää edelleenohjatessa alkuperäisessä kyselyssä käytettyä osoitetta eikä redirectissä käytettyä sisäverkon osoitetta.