Sivujen suojaus ja uudelleenohjaus .htaccess-tiedostossa 2009-05-26 17:00

Kuvaus:

.htaccess-tiedosto on hakemiston juureen tallennettava tiedosto, jolla voi antaa palvelimelle ohjeita sivupyyntöjen käsittelemiseksi. Tässä ohjeessa sivujen suojaus ja uudelleenohjaus .htaccess-tiedoston avulla, ja muutamia esimerkkejä myös PHP:llä.

Sivujen suojaus

.htaccess-tiedosto luodaan haluttuun hakemistoon, ja siinä annetut ohjeet vaikuttavat hakemiston lisäksi kaikkiin sen alihakemistoihin. Jos saat tyhjänkin tiedoston lisäämisen jälkeen "Internal server error" -tyyppisiä virheilmoituksia kun yrität avata sivuja selaimessa, voi olla että palveluntarjoajasi ei salli tiedoston käyttöä ylipäätään, tiettyjä käyttämiäsi ominaisuuksia, tai sitten olet tehnyt kirjoitusvirheen.

Hakemistolistauksen esto

Hakemistojen tiedostolistaukset, eli tiedot sen sisältämistä tiedostoista, voi estää rivillä:

IndexIgnore */*

Huom! Tämä ei estä pääsyä itse tiedostoon jos tietää sen osoitteen.

Liikenteen rajaus

Estetään kokonaan pääsy hakemistoon ja sen alihakemistoihin:

deny from all

Sallitaan sivujen avaaminen vain tietyistä IP-osoitteista, ja viimeisellä rivillä tietyn alkuisista domain-nimistä:

order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
allow from yyy.yyy.yyy.yyy
allow from domain.com

Salasanasuojaus

Sivut voi suojata kirjoittamalla (tässä Windows-palvelimella) .htaccess-tiedostoon

AuthType Basic
AuthName "Alueen nimi tai kuvaus"
AuthUserFile d:/hakemistopolku/palvelimella/.htpasswd
require valid-user

ja .htpasswd-tiedostoon

kayttajatunnus:salasana

Joillakin palvelimen asetuksilla .htpasswd-tiedostolle saattaa olla määrätty sijainti, mutta osalla onnistuu tämän ohjeen mukaisesti samaan laittamalla samaan tai vapaavalintaiseen kansioon. Vastaavasti itse salasana pitää/kannattaa kirjoittaa salattuna.

Uudelleenohjaus

.htaccess

Ohjataan yksittäinen sivu uudelle sivulle:

Redirect 301 /vanhasivu/ http://example.org/uusisivu/

Kaikki alisivut uudelleenohjataan siten että yritetään etsiä samanmuotoinen täydennys URL-osoitteeseen.

Redirect 301 /alihakemisto http://example.org/alihakemisto

Virhesivujen uudelleenohjaus:

ErrorDocument 500 500.htm
ErrorDocument 404 404.htm
ErrorDocument 403 403.htm
ErrorDocument 401 401.htm

PHP

PHP:n kyselytyyppisten URL-osoitteiden uudelleenohjaukset saa tehtyä helpoiten PHP:llä itsellään.

<?php

if(!empty($_SERVER['QUERY_STRING']) && isset($_GET['id'])) {
   $redirects = array(
      '/?id=5' => 'http://example.org/uusiosoite/',
      '/?id=11' => 'http://example.org/uusiosoite2/',
      '/?id=45' => 'http://example.org/uusiosoite3/',
      '/?id=54' => 'http://example.org/uusiosoite4/',
   );

   $urlisnow = '/?'.$_SERVER['QUERY_STRING'];

   foreach ($redirects as $key => $val) {
      if ($urlisnow == "$key") {
         header("HTTP/1.1 301 Moved Permanently");
         header("Location: $val");
         exit;
      }
   }
}
?>

Sivut alhaalla

Tässä esimerkissä ylläpitäjä (vaihda IP kohtaan xxx.xxx.xxx.xxx) pääsee sivuille normaalisti, kun muut kävijät näkevät sitedown.php-tiedostossa annetun sisällön.

.htaccess-tiedostoon:

RewriteCond %{REMOTE_ADDR} !^xxx\.xxx\.xxx\.xxx\$
RewriteRule !sitedown.php$ /sitedown.php [L]

ja sitedown.php-tiedostoon

<?php
header("HTTP/1.1 503 Service Unavailable");
header("Expires: Mon, 20 Dec 1998 01:00:00 GMT" );
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
?>
<h2>Joku ilmoitus käyttäjälle</h2>

www.-alku pois URL-osoitteista

Uudelleenohjataan kaikki www.example.org-alkuiset pyynnöt example.org-alkuisiin:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.example.org$
RewriteRule ^(.*)$ http://example.org/$1 [R=301,L]

Sekalaista

UTF-8-merkistöt oletuksena

Kaikille tiedostoille:

AddDefaultCharset UTF-8

Pelkille html-tiedostoille

AddCharset UTF-8 .html

Huom! Tämä asetus ajaa yli (X)HTML-asiakirjan meta-tiedoissa annetun merkistöasetuksen.

Luokka: »
Avainsanat:, , , , , , ,
http://raulihaverinen.fi/verkko-opas/?id=229