Maksutavat Abuse

Ota Apache Mod Rewrite käyttöön

06.03.2022, 00:06

Kun käyttäjä syöttää selaimeen tietyn URL-osoitteen ja painaa Enter-näppäintä, pyynnön vastaanottanut WWW-palvelin yrittää etsiä palvelimelta URL-osoitteessa määritellyn polun mukaista tiedostoa. Jos polulta ei löydy mitään, avataan indeksitiedosto, kuten index.html tai index.php. Jos mitään ei löydy, palautetaan 404-virhe. Meillä ei olisi kauniita ja helposti ymmärrettäviä URL-osoitteita, jos asiat eivät toimisi niin kuin ne nyt toimivat. Näitä URL-osoitteita käytetään monilla sivustoilla. Apache mod rewrite -moduuli on suunniteltu ratkaisemaan tämä ongelma Tässä ohjeessa katsotaan, miten se otetaan käyttöön.

Modin ottaminen käyttöön

Jos kaikki toimi kuvatulla tavalla, niin avatessasi minkä tahansa tämän sivuston linkin juurihakemistossa pitäisi olla olemassa tiedosto tai skripti, jolla on sama nimi osoiterivillä. Mutta näin ei ole. Kun tätä URL-osoitetta pyydetään, verkkopalvelin yrittää löytää tällaisen tiedoston, mutta jos se ei löydä sitä, se ei palauta 404-virhettä, vaan siirtää hallinnan mod_rewrite-moduulille, joka suorittaa kaikkien tällaisten URL-osoitteiden osalta index.php-skriptin ja välittää sille kyselymerkkijonon verkkotunnuksen jälkeen. PHP käyttää sitten näitä tietoja käyttäjän tarvitseman sivun löytämiseen ja palauttamiseen.

Voit ottaa mod-rewrite käyttöön suorittamalla yksinkertaisen komennon:

$ sudo a2enmod rewrite

Kun olet käynnistänyt verkkopalvelimen uudelleen:

$ sudo systemctl restart apache

Vaikka moduuli on käytössä Apache-verkkopalvelimen tasolla, se ei tarkoita, että se toimii verkkosivustolla. Tätä varten se on määritettävä .htaccess-tiedostossa, määritä, minkä skriptin perusteella siirretään pyynnöt olemattomille sivuille. Jotta .htaccess-tiedosto toimisi, AllowOwerride: All -direktiivi on lisättävä virtuaalisen isäntäkoneen Directory-osioon.

Esimerkkinä:

Seuraavaksi esimerkiksi WordPressissä sinun on lisättävä .htaccess-tiedostoon tämän kaltaiset rivit:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

All-koodi sijoitetaan IfModule-direktiiviin, jolloin sen sisällä oleva koodi voidaan suorittaa vain, kun mod_rewrite-moduuli on käytössä, muuten nämä rivit yksinkertaisesti jätetään huomiotta. RewriteEngine On -direktiivi ottaa moduulin käyttöön nykyisen hakemiston osalta. Tämän jälkeen RewriteBase määrittää, että koko merkkijono domainin jälkeen on välitettävä skriptille. Seuraavaksi tulevat RwriteRule-säännöt ja niiden ehdot RewriteCond, jotka suoritetaan tiukasti peräkkäin.

Yksi RewriteRule-säännöistä ^index .php$ - [L] sanoo, että jos URL-osoite sisältää index.php:n, URL-osoite on kirjoitettava uudelleen muotoon /. Tässä säännöllisessä lausekkeessa määritetään koko merkkijono ja piste vältetään backslashilla. Merkintä [L] tarkoittaa, että jos URL-osoite vastaa tätä sääntöä, seuraavia sääntöjä ei tarkisteta. Kun tämä sääntö on suoritettu, URL-osoite kirjoitetaan uudelleen ja verkkopalvelin olettaa vastaanottaneensa pyynnön /, sääntöanalyysi alkaa uudelleen ja tällä kertaa se vastaa viimeistä sääntöä.

RewriteCond-ehdot koskevat kaikkia seuraavia sääntöjä. Näin ollen RewriteCond %{REQUEST_FILENAME} !-f ja RewriteCond %{REQUEST_FILENAME} !-d sallivat viimeisen säännön suorittamisen vain, jos URL-osoite ei ole tiedosto tai kansio. Viimeinen sääntö ohjaa kaiken uudelleen ./index.php-skriptiin.

Jos et ymmärrä mod_rewrite-asetuksia, kannattaa katsoa, mitä verkkopalvelimen sisällä tapahtuu uudelleenohjausten aikana. Tätä varten sivuston virtuaalisen isännän konfiguraatioon on lisättävä tämä rivi.

Esim:

$ sudo vi /etc/apache2/sites-available/001-texts.conf

LogLevel warn rewrite:trace4

Sitten lokitiedostossa, joka annetaan ErrorLog-direktiivissä, näet kaikki verkkopalvelimen yritykset muuntaa URL-osoite sääntöjesi mukaisesti ja pystyt ymmärtämään, mitä teet väärin. Tässä opetusohjelmassa olemme käsitelleet, miten Apache mod rewrite otetaan käyttöön, sekä miten se kaikki toimii ja miten etsiä virheitä.