Spôsoby platby Abuse

Povolenie prepísania modulu Apache

06.03.2022, 00:06

Keď používateľ zadá do prehliadača určitú adresu URL a stlačí kláves Enter, webový server, ktorý dostane požiadavku, sa pokúsi nájsť súbor na serveri na ceste uvedenej v adrese URL. Ak sa na ceste nič nenájde, otvorí sa indexový súbor, napríklad index.html alebo index.php. ak sa nič nenájde, vráti sa chyba 404. Nemali by sme krásne a zrozumiteľné adresy URL, keby veci nefungovali tak, ako teraz. Tieto adresy URL sa používajú na mnohých lokalitách. Na riešenie tohto problému je určený modul apache mod rewrite V tomto návode si ukážeme, ako ho zapnúť.

Povolenie modulu

Ak všetko fungovalo tak, ako je popísané, potom by pri otvorení ľubovoľného odkazu tejto stránky v koreňovom adresári mal existovať súbor alebo skript s rovnakým názvom z adresného riadka. Ale nie je to tak. Pri požiadavke na túto adresu URL sa webový server pokúsi takýto súbor nájsť, ale ak ho nenájde, namiesto vrátenia chyby 404 odovzdá riadenie modulu mod_rewrite, ktorý pre všetky takéto adresy URL vykoná skript index.php, pričom mu za doménou odovzdá reťazec dopytu. PHP potom použije tieto údaje na vyhľadanie a vrátenie stránky, ktorú používateľ potrebuje.

Ak chcete zapnúť mod rewrite, spustite jednoduchý príkaz:

$ sudo a2enmod rewrite

Po reštartovaní webového servera:

$ sudo systemctl restart apache

To, že je modul povolený na úrovni webového servera Apache, neznamená, že bude fungovať pre webové stránky. Na tento účel ho treba nakonfigurovať v súbore .htaccess, určiť, na ktorý skript sa majú odovzdávať požiadavky na neexistujúce stránky. Aby súbor .htaccess fungoval, musí byť do sekcie Directory virtuálneho hostiteľa pridaná smernica AllowOwerride: All

Ako príklad možno uviesť nasledujúce príkazy:

Ďalej napríklad v systéme WordPress musíte do súboru .htaccess pridať riadky, ako je tento:

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

Všetky kódy sú umiestnené v smernici IfModule, ktorá umožňuje, aby sa kód v nej vykonal len vtedy, keď je povolený modul mod_rewrite, inak sa tieto riadky jednoducho ignorujú. Smernica RewriteEngine On zapína modul pre aktuálny adresár. Potom RewriteBase určuje, že celý reťazec za doménou sa má odovzdať skriptu. Ďalej nasledujú pravidlá RwriteRule s podmienkami pre ne RewriteCond, ktoré sa vykonávajú striktne postupne.

Jedno z pravidiel RewriteRule ^index .php$ - [L] hovorí, že ak adresa URL obsahuje index.php, adresa URL sa má prepísať na /. V tomto regulárnom výraze je uvedený celý reťazec a bodka je escapovaná spätným lomítkom. Príznak [L] znamená, že ak URL zodpovedá tomuto pravidlu, potom by sa nasledujúce pravidlá nemali kontrolovať. Po vykonaní tohto pravidla sa adresa URL prepíše a webový server bude predpokladať, že dostal požiadavku /, analýza pravidiel sa začne znova a tentoraz bude zodpovedať poslednému pravidlu.

Podmienky RewriteCond sa vzťahujú na všetky nasledujúce pravidlá. Takže máme RewriteCond %{REQUEST_FILENAME} !-f a RewriteCond %{REQUEST_FILENAME} !-d umožňujú, aby sa posledné pravidlo vykonalo len vtedy, ak URL nie je súbor alebo priečinok. Posledné pravidlo presmeruje všetko na skript ./index.php.

Ak nerozumiete nastaveniam mod_rewrite, oplatí sa pozrieť, čo sa deje vo vnútri webového servera počas presmerovania. Ak to chcete urobiť v konfigurácii virtuálneho hostiteľa webu, musíte pridať tento riadok.

Napríklad:

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

LogLevel warn rewrite:trace4

Potom v súbore protokolu, ktorý je uvedený v smernici ErrorLog, uvidíte všetky pokusy webového servera o konverziu adresy URL podľa vašich pravidiel a budete môcť pochopiť, čo robíte zle. V tomto návode sme sa venovali tomu, ako zapnúť mod rewrite Apache, ako aj tomu, ako to celé funguje a ako hľadať chyby.