Betaalmethoden Abuse

Apache Mod Rewrite inschakelen

06.03.2022, 00:06

Wanneer een gebruiker een specifieke URL in een browser invoert en op Enter drukt, probeert de webserver die het verzoek ontvangt een bestand op de server te vinden op het pad dat in de URL is opgegeven. Als er niets wordt gevonden op het pad, wordt er een indexbestand zoals index.html of index.php geopend. Als er niets wordt gevonden, wordt er een 404-fout geretourneerd. We zouden geen mooie en gemakkelijk te begrijpen URL's hebben als de dingen niet zouden werken zoals ze nu doen. Deze URL's worden op veel sites gebruikt. De apache mod rewrite module is ontworpen om dit probleem op te lossen. In deze tutorial zullen we zien hoe we deze module kunnen inschakelen.

De mod inschakelen

Als alles zou werken zoals beschreven, dan zou er bij het openen van een link van deze site in de hoofddirectory een bestand of script met dezelfde naam uit de adresbalk moeten komen. Maar dat is niet het geval. Bij het opvragen van deze URL probeert de webserver zo'n bestand te vinden, maar als hij het niet vindt, geeft hij in plaats van een 404-fout terug te sturen, de controle door aan de module mod_rewrite, die voor al zulke URL's het script index.php uitvoert en de querystring na het domein doorgeeft. PHP gebruikt deze gegevens dan om de pagina te vinden en terug te sturen die de gebruiker nodig heeft.

Voer een eenvoudig commando uit om mod rewrite in te schakelen:

$ sudo a2enmod rewrite

Na het herstarten van de webserver:

$ sudo systemctl restart apache

Het feit dat de module is ingeschakeld op het niveau van de Apache webserver betekent niet dat deze zal werken voor een website. Hiervoor moet het worden geconfigureerd in het .htaccess-bestand, waarin wordt gespecificeerd op welk script verzoeken naar niet-bestaande pagina's moeten worden doorgestuurd. Om het .htaccess-bestand te laten werken, moet de richtlijn AllowOwerride: All worden toegevoegd aan de Directory-sectie van de virtuele host

Als voorbeeld:

Vervolgens moet je bijvoorbeeld in WordPress regels als deze toevoegen aan het .htaccess bestand:

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

Alle code wordt geplaatst in de IfModule directive, waardoor de code daarin alleen wordt uitgevoerd als de mod_rewrite module is ingeschakeld, anders worden deze regels gewoon genegeerd. De richtlijn RewriteEngine On schakelt de module in voor de huidige directory. Dan geeft RewriteBase aan dat de hele string na het domein moet worden doorgegeven aan het script. Daarna komen de regels RwriteRule met voorwaarden voor hen RewriteCond, die strikt opeenvolgend wordt uitgevoerd.

Een van de RewriteRule regels ^index .php$ - [L] zegt dat als de URL index.php bevat, de URL moet worden herschreven naar /. In deze reguliere expressie wordt de hele string opgegeven en de punt wordt ontsnapt met een backslash. De [L] vlag betekent dat als de URL overeenkomt met deze regel, de volgende regels niet gecontroleerd moeten worden. Nadat deze regel is uitgevoerd, zal de URL worden herschreven en zal de webserver aannemen dat het verzoek / is ontvangen, de regelanalyse zal opnieuw beginnen en deze keer zal het overeenkomen met de laatste regel.

De RewriteCond voorwaarden zijn van toepassing op alle volgende regels. Dus we hebben RewriteCond %{REQUEST_FILENAME} !-f en RewriteCond %{REQUEST_FILENAME} !-d zodat de laatste regel alleen wordt uitgevoerd als de URL geen bestand of map is. De laatste regel leidt alles om naar het script ./index.php.

Als je de mod_rewrite instellingen niet begrijpt, is het de moeite waard om te kijken wat er binnen de webserver gebeurt tijdens je redirects. Om dit te doen in de configuratie van de virtuele host van de site, moet je deze regel toevoegen.

Bijvoorbeeld:

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

LogLevel warn rewrite:trace4

Dan ziet u in het logbestand, dat wordt opgegeven in de ErrorLog-richtlijn, alle pogingen van de webserver om de URL om te zetten volgens uw regels en kunt u begrijpen wat u verkeerd doet. In deze tutorial hebben we besproken hoe je Apache mod rewrite inschakelt, hoe het allemaal werkt en hoe je naar fouten kunt zoeken.