HUOM! Voit itse lisätä ja muuttaa sisältöä muokkaa-painikkeiden avulla

 Olet itse vastuussa tämän teoksen käytöstä aiheutuvista vahingoista Lue lisää.

.htaccess

Wikikko - kansan taitopankkista
Siirry navigaatioon Siirry hakuun

.htaccess[muokkaa]

  • .htaccess-tiedoston (Hypertext Access) avulla tehdään asetuksia, jotka vaikuttavat palvelimen vastauksiin eri tilanteissa. Tiedostossa voidaan määritellä monia asioita. Esimerkiksi onko URL-osoitteen lopussa /-merkki vai ei, tarvitaanko salasanaa sivuston avaamiseen, ohjaamaan vanhentuneista tai käytöstä poistuneista URL-osoitteista uusiin URL-osoitteisiin, muuttamaan php.ini-asetuksia jne. .htaccess on nopea tapa vaikuttaa esimerkiksi uudelleenohjauksiin.
  • .htaccess suoritetaan jokaisen palvelimelle tulevan sivupyynnön yhteydessä! Joten muutos tiedostoon näkyy välittömästi. Ennen kuin lisätään jotain .htaccess-tiedostoon kannattaa miettiä, onko se oikea kohde asetukselle. Jos mahdollista kannattaa käyttää tarpeen mukaan php.ini ja httpd.conf -tiedostoja, jos niihin on pääsy tai suoraan esimerkiksi WordPressin asetusten kautta.
  • .htaccess sijaitsee juurihakemistossa public_html tai www. Lisäksi tiedostoa voi olla myös muissa hakemistoissa, vaikka jokaisessa. Ylimpänä hakemistohierarkiassa (yleensä /public_html) oleva .htaccess vaikuttaa kaikkiin sen alapuolella oleviin alihakemistoin. Jos ylemmän alla alihakemistossa on .htaccess-tiedosto, ajaa sen komennot ylemmän hierarkiassa olevan .htacces-tiedoston yli. Ts. lähimpänä tiedostoa oleva .htaccess on etusijalla. Ts. .htaccess-tiedostoja suoritetaan sen mukaan kun palvelin löytää niitä suorittaessaan pyyntöä. Usein juurihakemiston lisäksi vähintään alihakemistoissa olevien eri sovellusten päähakemistoissa on yksi.
  • .htaccess on piilotiedosto (Hidden File), joten se ei näy hakemistoissa, jos piilotiedostoja (.-alkuisia) ei ole laitettu näkyväksi. Esimerkiksi ladatessa piilotiedosto kotitietokoneelle, se ei välttämättä näy ilman asetusten muutosta.
  • .htaccess voidaan itse luoda tai muokata olemassa olevaa tekstieditorilla. Käytä pelkkää tekstieditoria, ei siis mitään muotoiluja sisätävää kuten .rft, .doc (Word) jne. vaan .txt. Tallenna ASCII -muodossa ja tee tiedonsiirto palvelimelle samoin ASCII-muodossa, ei käyttäen esimerkiksi UTF-8 -merkistöä. Tiedoston nimi on .htaccess ja se ei sisällä tiedostopäätettä kuten .txt
  • .htaccess toteutetaan ylhäältä alaspäin riviltä yksi. Paitsi seuraavassa tilanteessa, jossa ensin verrataan alempana olevaan RewriteRulen ensimmäiseen osaan (pattern) ja jos löytyy vastaavuus, katsotaan ylempänä olevia ehtoja sen toteuttamiseksi. Jos kaikki ehdot toteutuvat, suoritetaan RewriteRulen jälkimmäinen osa (kohde) ja liput.
RewriteCond
RewriteCond
RewriteRule pattern kohde [lippu]
  • Yhdenkin merkin virhe tiedostossa saattaa johtaa siihen, että mikään sivu ei lataudu ja tulee 500-virheilmoitus. Toisin sanoen sivusto on tällöin alhaalla. Tämän takia on AINA hyvä pitää varmuuskopio viimeisimmästä toimivasta .htaccess-tiedostosta tai muutoin olla selvillä muutoksista. Joskus voi myös tapahtua niin, että tiedosto jostain syystä korruptoituu ja vain vanhan tiedoston palauttaminen tai uuden tiedoston luominen ilman kopioi-liitä ratkaisee asian.
    • Lisäykset .htaccess-tiedostoon kannattaa tehdä vähissä erin, yksi asia kerrallaan testaten, että muutos ja sivusto toimivat.
  • Huom 1: Kun työstetään .htaccess-tiedostoa, käytä useampaa selainta ja laitetta muutosten vaikutusten tarkasteluun. Liian usein esimerkiksi macOS tai iOS -käyttöjärjestelmien Safari antaa virheilmoituksia eikä näytä muutoksia, jotka oikeasti toimivat ja jostain syystä vasta viiveellä Safarissa!!!
    • Selain täytyy tyhjentää välillä, koska voi olla että yrität tehdä muutoksia ja oikeasti toimivat, mutta selain temppuilee sivua ladatessa. Kuitenkaan tämäkään ei välttämättä vaikuta aina auttavan!
    • Safari / Nollaa Safari... / Tyhjennä historia
    • Firefox / Sivuhistoria / Poista historiatietoja / Väliaikaistiedostot
  • Huom 2: cPanelin kautta tehdyt muutokset eivät esimerkiksi välttämättä kaikki toimi eikä myöskään suoraan .htaccess tiedostoon tehdyt uudelleenohjaukset jos RewriteOptions inherit on päällä. Kokeile laittaa risuaita sen eteen ja tyhjennä selaimen välimuisti ja historia, ennen kuin alat säätämään muuta.
    • Inherit tarkoittaa että .htaccess-tiedoston säännöt isäntähakemistossa ovat periytyvät. <TÄHÄN SELVITYS SUOMEKSI!!!>
https://stackoverflow.com/questions/15868763/what-does-rewriteoptions-inherit-in-htaccess-file-do
#RewriteOptions inherit
  • Huom 3: "When you put configuration directives in a .htaccess file, and you don't get the desired effect, there are a number of things that may be going wrong. Most commonly, the problem is that AllowOverride is not set such that your configuration directives are being honored. Make sure that you don't have a AllowOverride None in effect for the file scope in question. A good test for this is to put garbage in your .htaccess file and reload. If a server error is not generated, then you almost certainly have AllowOverride None in effect. If, on the other hand, you are getting server errors when trying to access documents, check your Apache error log. It will likely tell you that the directive used in your .htaccess file is not permitted."" (https://httpd.apache.org/docs/2.4/howto/htaccess.html)
  • Huom 4: Varmista että VARMASTI olet kirjoittanut osoitteet oikein. Esimerkiksi ettei ole osoitepääte.pääte kun pitäisi olla osoite.pääte

.htaccess näkyvyys ja oikeudet[muokkaa]

  • .htaccess -tiedoston oikeudet ovat 644
  • .htaccess tulee piilottaa, jotta sen sisältöä eivät näe muut internetin käyttäjät. Lisää .htaccess-tiedostoon seuraava:
<Files .htaccess>
order allow,deny
deny from all
</Files>

Näkyvä hakemisto[muokkaa]

Joskus käy niin, että vierailtaessa jollain sivulla, tulee näkyviin ainoastaan hakemisto tiedostoineen. Näin ei pitäisi tietysti käydä. Usein tämä on jokin /public_html-alihakemisto. Tällaisessa paljastuvassa hakemistossa ei ole esimerkiksi index.html-tiedostoa ja .htaccess-tiedostossa ei ole oletushakemistosivua määritelty.

  • Lisää .htaccess-tiedoston alkuun /public_html-hakemistossa seuraava ja sen jälkeen hakemiston avaaminen antaa 403-ilmoituksen.
Options -Indexes
  • Vastaavasti jos palvelimen asetuksissa on jo hakemisto piilotettu, mutta hakemisto halutaan näkyviin hakemistossa vierailtaessa: Options +Indexes
  • Jos halutaan näyttää hakemisto, mutta piilottaa siitä määrätyt tiedostopäätteiset tiedostot: IndexIgnore *.gif *.jpg
  • Jos halutaan näyttää hakemisto, mutta piilottaa määrätty tiedosto: IndexIgnore tiedostonimi.pääte

Näkyvä koodi[muokkaa]

Sivuston lähdekoodi halutaan näkyviin sivua pyydettäessä sen sijaan että lähekoodi, esim. html:n mukaisesti tuotettaisiin sivu.

  • Huom! Älä käytä tätä public_html-hakemiston .htaccess tiedostossa, koska se voi paljastaa esimerkiksi tiedostojen sisältöä, jota ei saa näyttää. Sen sijaan käytä esimerkiksi alihakemistossa, jonka tiedostot halutaan näyttää lähdekoodina. Lisää tiedostopäätteet tarpeen mukaan.
RemoveHandler cgi-script .php .py
AddType text/plain .php .py 

Hakemiston suojaaminen php-skripteiltä[muokkaa]

Hakemisto, johon internetistä voi ladata tiedostoja ovat alttiita tiedostojen latauksille, joista on haittaa. Esimerkiksi MediaWikin /images-hakemisto, johon tiedostot tallennetaan kannattaa suojata .htaccess-tiedostolla, jossa on seuraava:

<Files ~ "\.ph(?:p[345]?|t|tml)$">
   deny from all
</Files>
  • Testaa lisäämällä /images-hakemistoon tiedosto phpinfo.php joka sisältää <?php phpinfo() ?> ja anna selaimessa https://osoite.pääte/mediawikinasennushakemisto/images/phpinfo.php jolloin pitäisi tulla ilmoitus ettei ole oikeutta. Jos sen sijan tulee pitkä listaus palvelimen asetuksista, em. esto ei toimi palvelimella sen nykyisillä asetuksilla.


Polut[muokkaa]

  • Jonkun hakemiston tarkka polku saadaan seuraavalla tavalla esiin, jos sitä ei osata muutoin lukea:
    • Tee tekstitiedosto polkujenselvitys.php, joka sisältää seuraavan php-koodin ja sijoita se hakemistoon, jonka sijainti tiedostojärjestelmässä halutaan selvittää.
<?php
$dir = dirname(__FILE__);

echo "

Polku hakemistoon on " . $dir . "

"; echo "

Polku .htpasswd-tiedostoon on " . $dir . "/.htpasswd" . "

";

?>
  • Suorita kyseinen tiedosto selaimessa: www.osoite.pääte/hakemistojossatiedosto/polkujenselvitys.php

Virheiden käsittely[muokkaa]

  • .htaccess-tiedostoa voi käyttää virheiden käsittelyyn. Sivuston käyttäjän pyytäessä sivua palvelimelta, palvelin toimittaa sen, ellei tapahdu virhettä. Virhetilanteita on lukuisia erilaisia ja niillä on numero. Esimerkiksi 404 Not Found. Virheet jaetaan käyttäjään liittyviin (client request errors) ja palvelimeen liittyviin (server errors). Se on sitten jo haastavampaa tietää, mikä on esimerkiksi 500-virheilmoituksen syy ja vaatii esimerkiksi lokien käyttämistä virheen paikantamiseen.
  • Jos virheiden ilmoittamisesta ei ole annettu mitään tarkempaa ohjetta palvelimelle, käyttäjän selain ilmoittaa sen yleensä tekstinä. .htaccess-tiedoston avulla em. teksti-ilmoituksen sijaan virhetilanteen syntyessä voidaan tehdä jotain muuta, esimerkiksi lähettää käyttäjä toiselle verkkosivulle tai antaa tarkempia ohjeita. 404-virheilmoituksessa, että sivua ei löydy, ei kannata lähtökohtaisesti ohjata esimerkiksi sivuston etusivulle, vaan käyttäjälle kannattaa tarjota sivu, joka ilmoittaa että haettua sivua ei löytynyt ja mitä nyt voisi tehdä sen löytämiseksi tai kertoa, että sivu on pysyvästi poistettu. Myös julkaisujärjestelmät itsessään saattavat sisältää asetuksia, joilla julkaisujärjestelmän sisältä hallitaan näitä sivuja.
  1. Luodaan oma verkkosivu kyseiselle virheelle, esimerkiksi html-kielellä, ja nimetään se esim. 404.html
  2. Tallennetaan se esimerkiksi alihakemistoon /public_html/virhesivut
  3. Lisätään .htaccess-tiedostoon rivi: ErrorDocument 404 /virhesivut/404.html
  • 500 Internal Server Error
    • www ei näy: Lisää julkaisujärjestelmän config.php tms. tiedostoon root_url tms. kohtaan http://www.osoite.pääte/alihakemisto
      • Muutoin selain ei löydä hakemisto ja ilmoittaa: Not Found The requested URL was not found on this server.
    • Uudelleenohjaus alihakemistossa olevaan sivuston julkaisujärjestelmän etusivulle toimii domainista, mutta sivustossa liikkuminen aiheuttaa ulkoasun putoamisen pois etusivulta ja sivulta toiselle siirtyminen ei onnistu. Tarkista että julkaisujärjestelmän config.php tms. tiedostossa url-osoite on varmasti oikein, ettei ole kirjoitusvirhettä esm. osoite.päätepääte kun pitäisi olla osoite.pääte

Debugging[muokkaa]

  • Apachen rewrite-sääntöjä asettaessa virheilmoitukset eivät ole harvinaisia ja umpikujaan päätyy.
  • Luo hakemisto lokitiedostolle ja lisää .htaccess-tiedostoon seuraava. Käytä tasoa 5, koska se antaa riittävästi tietoa, korkeampi tasoa ei välttämättä tuo mitään lisähyötyä ja voi vain hidastaa sivuston lataamista.
RewriteEngine on
RewriteLog /public_html/alihakemisto
RewriteLogLevel 5

Yleistä[muokkaa]

  • mod_alias riittää moneen uudelleenohjaukseen, mutta mod_rewrite varsinaisesti antaa kaikki mahdollisuudet. mod_rewrite käsittelee palvelimelle tulleen pyynnön sopivaksi ja toteuttaa sen palauttaen sivun sen sijaan että se palauttaisi käyttäjän selaimelle tietoa uudesta osoitteesta kuten mod_alias Redirect. mod_rewrite mahdollistaa siis esimerkiksi URL-osoitteen vastaavuuden tunnistamisen ja ohjaamisen toisaalle.
  • Apache web server -käsittelee pyynnöt.
  • Pyyntö palvelimelle voi kohdistua määrättyyn sivuun tai tiedostoon tai ilman edellä mainittuja.
    • Esimerkiksi https://osoite.pääte/alihakemisto/tiedosto.php vastaa lähtökohtaisesti /public_html/alihakemisto/tiedosto.php
    • Jos taas pyyntö kohdistuu https://osoite.pääte Apache ohjaa pyynnön lähtökohtaisesti /public_html-hakemistoon ja siellä olevaan index.html, index.php tms. tiedostoon, joka jatkaa pyynnön käsittelyä lopulta pyrkien toimittamaan verkkosivun tai tiedoston käyttäjälle. Tämä voidaan muuttaa tarvittaessa .htaccess-tiedostossa seuraavasti. Jos annetaan useita nimiä peräkkäin, palvelin aloittaa niiden etsinnän vasemmalta järjestyksessä.
DirectoryIndex tiedostonimi.php
DirectoryIndex tiedostonimi.php tiedostonimi.html
  • Oletuksena on, että isot ja pienet kirjaimet ovat eri asioita. Tämä voidaan kumota [NC]-lipulla.

www vai ilman[muokkaa]

  • www-alidomainin käyttäminen vähenee (2021).
  • Jos sivustolla ei käytetä www osoitteen edessä, kuitenkin käyttäjät, jotka lisäävät osoitteen eteen www pitäisi saada myös palveltua.
Options +FollowSymlinks
RewriteEngine on
RewriteCond % ^www.osoite.pääte [NC]
RewriteRule ^(.*)$ https://osoite.pääte/$1 [R=301,NC]
  • Jos sivustolla käytetään www osoitteen edessä, kuitenkin käyttäjät, jotka eivät lisää osoitteen eteen www pitäisi saada myös palveltua.
RewriteEngine On
RewriteCond % ^osoite.pääte [NC]
RewriteRule ^(.*) https://www.osoite.pääte/$1 [R=301,NC]

Merkit[muokkaa]

Regular expression (RegEx). Nämä ovat Perl-yhteensopivia.

  • () - ryhmittelee jotain, joka huomioidaan, esimerkiksi (pizza)+ vastaa pizzapizza ja sitä voidaan käyttää myöhemmin muodostettaessa uudelleenohjausta. Arvo tallentuu muuttujaan (backreference).
    • /index.php?title=(.*)&id=(.*)$ --> /index.php?title=Pizza&id=100 --> poimii jatkoon $1=Pizza ja $2=100
    • .*(zz).* vastaa pizzaa, zza, rizz
  • ^ - circumflex, hat, caret, anchor, pointy-up thingy eli vaatii lausekkeen alkavan sitä seuraavalla muodolla. Esimerkiksi ^P vastaa Pizza mutta ei UPizza
  • $ - vaatii lausekkeen loppuvan sitä edeltävään muotoon. Esimerkiksi a$ vastaa Pizza mutta ei Pizzalle
  • $1 tai %1 - kutsuu ensimmäistä ()-ryhmää vasemmalta ja $2 seuraavaa jne. Jos sulkeita on sisäkkäin ((jotain)jotain) niin $1 tarkoittaa uloimpia sulkeita.
  • . - vastaa mitä tahansa yhtä merkkiä, esimerkiksi sana1.sana2 välissä oleva piste voi olla esimerkiksi z tai @ kuten sana1@sana2 tai sanan sisällä oleva merkkejäsana1zsana2merkitjatkuu jolloin koko rimpsu otetaan huomioon
  • \ - backslash, esimerkiksi sana1\.sana2 vastaa ainoastaan sana1.sana2 eli todellista pistettä kun taas sana1.sana2 vastaa edellä kuvattua missä se vastaa mitä tahansa yhtä merkkiä, esimerkiksi sana1@sana2. Ts. \-merkillä voidaan jokin merkki saada tarkoittamaan sitä mikä se tosiasiallisesti on.
    • (.*)\.php$ - kaikki ennen .php tallennetaan myöhempää käyttöä varten
  • [] - esimerkiksi [iz] vastaa kirjaimiin i ja z ja p[iz]a vastaa pia, pza tai piano mutta ei pizat
    • [^iz]on - mitkä tahansa merkit vastaavat paitsi i ja z, esimerkiksi lon mutta ei ion tai zon
    • [a-z] - vain kirjaimet a–z väliltä huomioidaan
    • [0-9] - vain numerot 0–9 väliltä huomioidaan
  • – - toimenpidettä ei suoriteta
  • ! - määrittää EI-toiminnon
  • | - looginen TAI (OR) -operaattori
  • + - yhtäläisyys täytyy olla vähintään yhden merkin/kerran kanssa, esimerkiksi z+ vastaa z, zzz, pizza jne.
  • * - "villi kortti", minkä tahansa edeltävän merkin ei täydy vastata tai täytyy vastata yhden tai useamman kerran. Esimerkiksi piz*a vastaa pizza, piza tai pia.
  • ? - edeltävä merkki on valinnainen, minkä tahansa edeltävän merkin ei täydy vastata tai täytyy vastata yhden kerran. Esimerkiksi piz?a vastaa piza tai pia
  • # - kommentti, ei huomioida tekstiä merkin jälkeen ennen rivinvaihtoa
  • "" - esimerkiksi "(.*)pizza(.*)"
  • -d - tarkastaa sijaitseeko muuttuja hakemistossa
  • -f - tarkastaa onko muuttuja olemassa oleva tiedosto
  • -s - testaa ei nolla-arvoa


  • HUOM! Yhdistettäessä useampi lippu, pilkun jälkeen EI tule välilyöntiä
  • [C] - Chain, sääntö yhdistetään seuraavaan sääntöön. Jos joku säännöistä ei vastaa, mitään toisiinsa yhdistetyistä säännöistä ei toteuteta.
  • [E] - env,
    • RewriteRule (.*)\.(php)$ - [E=muuttujanimi:$1] tarkoittaa, että jos esim. pyyetään tiedostonimi.php niin muuttuja nimeltää muuttujanimi sisältäisi arvon tiedostonimi
    • Muuttuja otetaan pois [E=!muuttujanimi]
  • [F] - Forbidden, aiheuttaa palvelimen palauttamaan 403 forbidden. Käytetään esimerkiksi estämään pääsy joihinkin tiedostoihin.
  • [H] - Handler,
  • [L] - Last, ilmoittaa että sääntöryhmän käsittely on lopetettava. Seuraavat säännöt muodostavat uuden sääntöryhmän.
  • [N] - Next, ilmoittaa että sääntöryhmä käsitellään uudestaan alusta käyttäen siihen saakka uudelleen kirjoitettua URL-osoitetta alkuperäisen sijasta kunnes pattern-vastaavuutta ei enää ole. [N=3] suorittaa enintään kolme kertaa.
  • [NC] - nocase, ei väliä käytetäänkö isoja tai pieniä kirjaimia.
  • [NE] - noescape, palvelin ei huomioi määrättyjä merkkejä kunten # eikä korvaa niitä esimerkiksi %20 (välilyönti)
  • [PT] - passthrough, muodostettua uutta osoitetta käsitellään kuin se olisi alkuperäinen palvelimelle saapunut pyyntö ja lähetetään palvelimelle toteutettavaksi
  • [R] - redirect, uudelleenohjaus. Jos lausekeen jälkimmäinen ohjaava osa alkaa https:// tai http:// niin jälkimmäinen osa huomioidaan URL-osoitteena ilman tarvetta [R]. Oletuksena 302.
    • [R=301] -
    • 301 - pysyvä uudelleenohjaus, sivu on siirretty. Ohjaa toisesta URL-osoitteesta toiseen ja kertoo hakukoneille, että sivu on pysyvästi siirtynyt ja uusi osoite voidaan indeksoida hakukoneelle vanhan tilalle.
    • 302 - tilapäinen uudellenohjaus, harvinaista käyttää tätä.
  • [QSA] - QS Append,
  • [S] - skip, käytetään hyppäämään määrätty määrä RewriteRuleja yli. Esim. [S=5]
https://www.hostwinds.com/guide/defining-regex-characters-htaccess

Palvelin-muuttujat[muokkaa]

%{HTTP_HOST} - esimerkiksi www.osoite.pääte
%{HTTP_REFERER} - 
%{HTTPS} - 
%{REMOTE_ADDR} - yleensä sivustolla vierailevan IP-osoite
%{REQUEST_FILENAME} - 
%{REQUEST_URI} - pyydetyn URL:n polku
%{REQUEST_SCHEME} - yleensä https tai http
%{QUERY_STRING} - pyydetty URL
jne. 

mod_alias[muokkaa]

Yksinkertaisempiin tehtäviin kuin mod_rewrite

Redirect[muokkaa]

Redirect palauttaa käyttäjän selaimelle oikean osoitteen, johon selaimen tulee lähettää pyyntö.

Redirect 301 /vanha-URL.php https://uusi-URL.php #uuteen tiedostoon
Redirect 301 "/vanha-URL.php" "/uusi-URL.php"
Redirect 301 /vanha-hakemisto https://osoite.pääte/uusi-hakemisto #uuteen hakemistoon
Redirect 301 / https://uusi-osoite.pääte #uuteen osoitteeseen
  • 301 - HTTP-status on valinnainen, oletus on 302, joten esimerkissä halutaan käyttää 301. Ei haittaa, jos oletusarvo 302 kirjoitetaan.
    • Numeron sijaan voidaan käyttää tekstiä, esimerkiksi Redirect temp tai RedirectTemp
301 permanent
302 temp
303 seeother
410 gone
  • vanha-URL:n alussa oleva / osoittaa public_html -hakemistoon eli esim. https://www.osoite.pääte/ eli hakemistoon, jossa .htaccess sijaitsee.
  • "vanha-URL" ei voi olla suhteellinen (relative) eli alussa täytyy olla /
  • "uusi-URL" alussa täytyy olla / tai esimerkiksi "https://www.uusi-URL.php"
  • Jos HTTP-status on välillä 300–399, täytyy sisältyä "uusi-URL"
    • Redirect 301 "/vanha-URL.php" "/uusi-URL.php" on oikein
    • Redirect 301 "/vanha-URL.php" on väärin
    • Redirect "/vanha-URL.php" on väärin, koska oletus on 302
  • Jos HTTP-status ei ole välillä 300–399, "uusi-URL" ei tule sisältyä
    • Redirect 403 "/vanha-URL.php" on oikein
    • Redirect 403 "/vanha-URL.php" "/uusi-URL.php" on väärin

RedirectMatch[muokkaa]

Erona Redirect on, että RedirectMatch käyttää regex:iä vastaavuden tutkimiseen ja uuden URL:n muodostamisessa voidaan käyttää vastaavuudessa käytettyjä () tietoja hyväksi $1. Käytössä ovat $0 - $9

RedirectMatch 301 "(.*)\.htm$" "$1.php"
  • 301 - HTTP-status
  • Ensimmäinen osa on regex ja jälkimmäinen osa on "uusi-URL"
  • Edellä oleva ohjaa kaikki htm-sivut php-sivuille samalla polulla ja tiedostonimellä.

RedirectPermanent[muokkaa]

RedirectTemp[muokkaa]

  • RedirectTemp on Redirect temp

mod_rewrite[muokkaa]

  • Huom 1. .htaccess "komentojen" toteuttamiseksi ennen sääntöjä on aina lisättävä RewriteEngine On. Yleensä se on heti .htaccess-tiedoston ensimmäisten rivien joukossa.
RewriteEngine On
    • Ei pakollista, mutta voidaan tarvittaessa kytkeä pois RewriteEngine Off ja kytkeä uudestaan päälle. Tätä voidaan esimerkiksi käyttää kun halutaan pysäyttää sääntöjen käsittely lopusta eikä käyttää #-merkkiä niiden poissulkemiseen.
  • Huom 2. Options +FollowSymLinks
Options +FollowSymLinks
  • .htaccess voisi siis näyttää esimerkiksi seuraavalta ennen sääntöjä:
<Files .htaccess>
order allow,deny
deny from all
</Files>

Options -Indexes
Options +FollowSymLinks
RewriteEngine on

 uudelleenohjaukset tähän...

SetEnv TZ Europe/Helsinki

RewriteBase[muokkaa]

Toisin kuin mod_alias, mod_rewrite hyväksyy myös suhteellisia URL-osoitteita eli ilman /-merkkiä. <TÄHÄN TARKENTAVA OHJE>

RewriteBase /
  • Edellä oleva asettaa polun suhteelliselle URL:lle DocumentRoot

RewriteOptions[muokkaa]

Sallii mod_rewrite-moduulin asetusten muuttamisen.

RewriteMap[muokkaa]

Ei voi käyttää .htaccess-tiedostossa.

RewriteCond[muokkaa]

  • Asettaa ehtoja joissa tilanteissa RewriteRule suoritetaan. Muodostetaan kolmesta osasta vasemmalta oikealle RewriteCond jälkeen välilyönneillä erotettuna:
  1. TestString eli "testattava asia"
  2. Pattern, jota vastaan testattavaa asiaa testataan
  3. []-merkkien sisällä olevat valinnaiset liput (flags)
  • Kutsut aiempiin ilmaistaan %1 jne.
  • ReweriteCond %{HTTP_HOST} ^osoite\.pääte [NC]
    • %{HTTP_HOST} - URL-osoitteessa https://www.osoite.pääte/alihakemisto/tiedosto.php tarkoittaa www.osoite.pääte
    • verrattaessa www.osoite.pääte "patterniin" ^osoite\.pääte eli osoite.pääte ei synny vastaavuutta, koska patternista puuttuu www.
    • %{HTTP_HOST} käytettäessä on tärkeää olla [NC], koska silloin ei ole väliä miten käyttäjä on kirjoittanut domainin, osoite.pääte tai oSoite.pääte

RewriteRule[muokkaa]

Tärkein, RewriteRule:lla URL-osoitetta voidaan muokata ja tehdän uudellenohjaus.

  • Muodostetaan kolmesta osasta vasemmalta oikealle RewriteRule jälkeen välilyönnillä erotettuna:
  1. Regular expression eli pattern: tätä polun osaa verrataan tulevaan URL-pyyntöön
  2. Substitution string, kohde: korvaava palvelimelle tulleen URL:n tai muu ohje selaimelle uudelleenohjaukseen. Oletuksena sitä käsitellään tiedostopolkuna.
  3. []-merkkien sisällä olevat valinnaiset liput (flag), joilla voidaan antaa lisäohjeita. Sijoitetaan viimeiseksi. Useampi erotellaan liput pilkuilla []-merkkien sisällä, esim. [NC,L,QSA]. Ei haittaa vaikka oletuksena toiminta jo tehtäisiin, mutta lipulla vielä toiseen kertaan. Lipun lyhenteen sijaan voidaan myös käyttää sen sanaa.
  • Toisin sanoen kun yritetään mennä URL-osoitteeseen pattern, ohjataan URL-osoitteeseen kohde. Muutos voidaan tehdä kumpaan suuntaan tahansa eli sotkuinen URL voidaan muuttaa siistimmäksi tai siistimpi URL voidaan muuttaa sellaiseksi, joka tarvitaan sivun tuottamiseksi.
  • RewriteRule ([a-z0-9/-]+)-([a-z]+).htm$ $1-$2.html [NC,L,QSA]
  • RewriteRule ^sana1/sana2(/.*|$) https://osoite.pääte/sana3
    • Huomioidaan sana1/sana2, sana1/sana2/ ja sana1/sana2/mitä-vain-jatkuu
  • RewriteRule ^/sana1/(.*) \/index.php?title=$1
  • Esimerkki 1
ReweriteCond %{HTTP_HOST} ^osoite\.pääte [NC]
RewriteRule ^(.*)$ https://www.osoite.pääte/$1 [L,R=301]
    • Edellä olevassa esimerkissä jos löytyy osoite.pääte niin suoritetaan uudelleenohjaus osoitteeseen https://www.osoite.pääte/polku
    • polku saadaan patternilla ^(.*)$ ilman ensimmäistä /-merkkiä.

Uudelleenohjaukset esimerkkejä[muokkaa]

Uudelleenohjaus useampaan hakemistoon[muokkaa]

Tavoite kun esimerkiksi drupal ja magento ovat saman juurihakemiston kaksi alihakemistoa:

    • www.osoite.pääte # ohjaa esimerkiksi drupal-kansioon eli varsinaisille kotisivuille
    • www.osoite.pääte/magento # ohjaa esimerkiksi magento-verkkokauppaan
  • Katso myös MediaWiki#Lyhyt_URL
  • Esimerkissä on käytetty osoite.pääte joka korvataan omalla domainilla sekä myös hakemistot johon halutaan ohjata, esimerkissä käytetty drupal ja magento sekä niiden vaatimat index.php -päätteet.
RewriteEngine on
# RewriteOptions inherit # Poista käytöstä

# Rewrite JavaScript callback URLs of the form js.php?q=x.
RewriteCond %{REQUEST_URI} ^\/js\/.*
RewriteRule ^(.*)$ js.php?q=$1 [L,QSA]

# Magento
RewriteCond %{HTTP_HOST} ^osoite\.pääte$ [OR]
RewriteCond %{HTTP_HOST} ^www\.osoite\.pääte$
RewriteRule ^magento\/$ "http\:\/\/www\.osoite\.pääte\/magento\/index\.php" [R=301,L]

# Drupal
RewriteCond %{HTTP_HOST} ^osoite\.pääte$ [OR]
RewriteCond %{HTTP_HOST} ^www\.osoite\.pääte$
RewriteRule ^/?$ "http\:\/\/www\.osoite\.pääte\/drupal\/index\.php" [R=301,L]

CMS Made Simple[muokkaa]

RewriteRule !^cmsmadesimple/ /cmsmadesimple%{REQUEST_URI} [L,NC]
Redirect /index.html http://osoite.pääte/alihakemisto/
RewriteCond %{THE_REQUEST} ^GET\ /alihakemisto/
RewriteCond %{HTTP_HOST} ^(www\.)?osoite.pääte$
RewriteRule ^cmsmadesimple/(.*) /$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^(www\.)?osoite.pääte$
RewriteRule !^cmsmadesimple/ cmsmadesimple%{REQUEST_URI} [L]

Salasanasuojattu hakemisto[muokkaa]

Seuraava ohje asettaa palvelimella olevalle hakemistolle ja sen alahakemistoille salasanasuojauksen. Kun selaimella yritetään avata osoitetta, avautuu ikkuna, joka pyytää tunnistautumaan. Tämän jälkeen sivusto aukeaa. Tämä voi olla hyödyllinen esimerkiksi silloin kun käytetään hiekkalaatikko-toimintoa esimerkiksi WordPressissä ja käytössä ei ole WordPressin normaali tunnistautumismenetelmä vaan jonkun lisäosan kirjautuminen WordPressiin. Tällöin hiekkalaatikko-lisäosa ei mahdollisesti päästä kirjautumaan sivustolle ja suojaustasoa joudutaan laskemaan.

  • HUOM! Muista piilottaa .htaccess-tiedoston sisältö internetissä!.
  • Selvitetään salattavan hakemiston tarkka osoite tällä sivulla mainitun polut-otsikon ohjeen mukaan.
  • Muodostetaan käyttäjätunnus ja salasana
  • Asenna salattavaan hakemistoon .htpasswd -tekstitiedosto, joka sisältää äsken muodostetun käyttäjätunnus-salasana -rivin. Näitä voi olla tiedostossa useampi omalla rivillään eri käyttäjille. Aseta tiedosto-oikeudeksi 444.
  • Asenna salattavan hakemiston .htaccess -tiedostoon seuraava koodi. Aseta tiedosto-oikeudeksi 644
AuthType Basic
AuthName "Password Protected Area"
AuthUserFile /polku/jonka/sait/aiemmin/selvitettyä/.htpasswd
Require valid-user
http://www.htaccesstools.com/articles/password-protection

Estäminen[muokkaa]

IP Blacklist[muokkaa]

order allow,deny
deny from xxx.xx.x.x
deny from osoite.pääte
allow from all
  • Järjestys tulee olla order allow,deny! Edellä palvelinta ohjeistetaan, että oletus on sallia kaikki, paitsi ne jotka on deny
  • Jos ip osoite on vain esim. xxx.xx.x niin kaikki tällä alkavat estetään.
  • deny from osoite.pääte estää myös osoitteesta alidomain.osoite.pääte

IP whitelist[muokkaa]

order deny,allow
deny from all
allow from xxx.xx.x.x
  • Järjestys tulee olla kuten esimerkissä!

Referrer, hotlinking[muokkaa]

Toinen sivusto voi käyttää toisen sivuston css-tiedoja, java-tiedostoja, kuvia (<img src="https://toisensivustonosoite.pääte/kuva.jpg">) jne. jotka aiheuttavat liikennettä näiden tiedostojen palvelimelle. Hyväksi käyttävä sivusto ei kuitenkaan välttämättä hyödytä tiedostojen omistajia vaan saattaa jopa aiheuttaa taloudellisia kuluja liikenteen lisääntyessä. Tällaisia hyväksi käyttävien sivujen linkkejä kutsutaan referrer.

  • Alla kohtaan osoite.pääte laitetaan sen sivuston osoite, jonka hyväksikäyttö halutaan estää.
RewriteEngine on
RewriteCond % ^http://.*osoite\.pääte [NC,OR]
RewriteCond % ^http://.*toinenosoite\.pääte [NC]
RewriteRule .* - [F]
  • Seuraava estää kuvien (joilla alla mainittu tiedostopääte) noutamisen palvelimeltasi eli jos pyyntö ei tule itseltä omalta palvelimelta. Myös muita tiedostopäätteitä voidaan käyttää.
RewriteEngine on
RewriteCond % !^$
RewriteCond % !^https://(www.)?omaosoite.pääte/.*$ [NC]
RewriteRule .(jpg|gif|bmp|png)$ - [F]
  • Seuraava ei estä kuvan noutoa vaan tarjoaa toisen kuvan.
RewriteEngine on
RewriteCond % !^$
RewriteCond % !^https://(www.)?omaosoite.pääte/.*$ [NC]
RewriteRule .(jpg|gif|bmp|png)$ https://omaosoite.pääte/kuva.gif [R,L]

Palvelimen aikavyöhyke[muokkaa]

php_value date.timezone 'Europe/Helsinki'
SetEnv TZ Europe/Helsinki

CGI[muokkaa]

Common Gateway Interface

  • Yleensä CGI-skriptit sijaitsevat hakemistossa /public_html/cgi-bin mutta jos niitä halutaan käyttää muissakin hakemistoissa, lisää .htaccess-tiedostoon seuraava
AddHandler cgi-script .cgi
Options +ExecCGI 

SSI[muokkaa]

Server Side Includes

  • Esimerkiksi sivuihin alatunnisteen lisääminen.

php.ini[muokkaa]

Käyttöoikeudet eivät välttämättä riitä php.ini -tiedoston muokkaamiseen palvelimella. .htaccess-tiedoston kautta voidaan muuttaa osaa php.ini-säännöistä. Esimerkiksi lisätään upload-tiedostokokoa:

php_value upload_max_filesize 50M