Zoeken op website

Hoe interne omleiding uit te voeren met mod_rewrite in Apache


In dit artikel en in het volgende zullen we uitleggen hoe je mod_rewrite kunt gebruiken om bepaalde HTTP-verzoeken toe te wijzen aan andere pagina's op een website of aan een externe URL.

Met andere woorden, met deze bekende Apache-module kunt u een URL omleiden naar een andere, wat we zullen illustreren met praktische voorbeelden.

Aanbevolen leesmateriaal: 5 tips om de prestaties van uw Apache-webserver te verbeteren

OPMERKING: In de onderstaande voorbeelden wordt ervan uitgegaan dat u op zijn minst enigszins bekend bent met Perl-compatibele reguliere expressies (PCRE). Aangezien dit onderwerp buiten de reikwijdte van dit artikel valt, raadpleegt u de documentatie van Perl 5 versie 24.0 voor meer details over PCRE.

Zorg ervoor dat de herschrijfmodule is geladen voordat u doorgaat. Hoewel dit het standaardgedrag is in CentOS en vergelijkbare distributies, moet u dit in Debian en afgeleide producten als volgt handmatig laden:

a2enmod rewrite

Apache configureren om de mod_rewrite-module te gebruiken

Laten we voor de eenvoud de standaardsite gebruiken in een CentOS 7-box (IP 192.168.0.100) om uit te leggen hoe je mod_rewrite ( DocumentRoot: /var/www/html, configuratiebestand: /etc/httpd/conf/httpd.conf).

Om Apache deze module te laten gebruiken, voegt u de volgende regel toe aan het configuratiebestand:

RewriteEngine on

Het is belangrijk op te merken dat deze configuratie niet wordt overgenomen door virtuele hosts in dezelfde box.

U moet dus RewriteEngine toevoegen voor elke virtuele host waarvoor u herschrijfregels wilt gebruiken.

Interne omleiding: het toewijzen van een URL aan een andere URL op dezelfde virtuele host

Een interne omleiding is het eenvoudigste voorbeeld van mod_rewrite. Als u alle verzoeken voor default.aspx wilt omleiden naar index.html, voegt u de volgende regel (ook wel een herschrijfregel genoemd) toe onder RewriteEngine > op:

RewriteRule "^/default\.aspx$" "/index.html"

en vergeet niet Apache opnieuw te starten zodat de wijzigingen van kracht worden.

Dit kan van pas komen als uw site oorspronkelijk is ontworpen met ASP en later is gewijzigd in gewone HTML5. Zoekmachines zullen het .aspx bestand geïndexeerd hebben, maar dat bestand bestaat niet meer.

In dat geval moet u een manier vinden om het verzoek om te leiden, zodat uw potentiële bezoekers niet op een foutpagina terechtkomen. Laten we om dit te testen een eenvoudig HTML-bestand maken met de naam index.html binnen /var/www/html met de volgende inhoud:

<!DOCTYPE html>
<html>
  <head>
	<meta charset="utf-8">
	<title>New site</title>
  </head>
  <body>
	<h2>Default.aspx was here, but now it's index.html</h2>
  </body>
</html>

De tekens caret en dollar zorgen ervoor dat de reguliere expressie overeenkomt met elke tekenreeks die begint met /default en eindigt met .aspx respectievelijk.

Voorgesteld lezen: Installeer Mod_Pagespeed om de prestaties van Apache tot 10x te versnellen

Start nu uw browser en wijs deze naar 192.168.0.100/default.aspx. Als alles gaat zoals verwacht, zou Apache in plaats daarvan index.html moeten weergeven.
De eindgebruiker zal echter nog steeds default.aspx in de adresbalk zien, waardoor de wijziging volledig transparant is:

Als je wilt dat de URL in de adresbalk laat zien dat de server daadwerkelijk index.html bedient in plaats van een pagina met de naam default.aspx, voeg dan [R, toe L] als volgt aan het einde van de herschrijfregel:

RewriteRule "^/default\.aspx$" "/index.html" [R,L]

Hier zijn [R,L] twee optionele vlaggen die aangeven dat een volledige HTTP-omleiding naar de browser (R) moet worden verzonden en dat er geen verdere regels hoeven te worden verwerkt:

Merk op dat de adresbalk nu index.html toont, zoals verwacht, in plaats van default.aspx zoals eerder.

Samenvatting

In dit artikel hebben we uitgelegd hoe je mod_rewrite kunt gebruiken om interne omleiding uit te voeren. Houd ons in de gaten voor het volgende bericht, waarin we zullen leren hoe we kunnen omleiden naar een bron die naar een andere server is verplaatst, en hoe we aangepaste inhoud kunnen weergeven op basis van de browser van de gebruiker. Raadpleeg tot die tijd de documentatie van Apache 2.4 voor een volledige lijst van de beschikbare herschrijfvlaggen.

Zoals altijd kunt u het onderstaande reactieformulier gebruiken als u vragen of feedback over dit artikel heeft. Wij horen graag van u!