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, deze bekende Apache-module kunt u een URL naar een andere verwijzen, wat we zullen illustreren aan de hand van praktische voorbeelden.
Voorgesteld lezen:5 tips om de prestaties van uw Apache-webserver te verbeteren
OPMERKING: De onderstaande voorbeelden gaan ervan uit dat u op zijn minst enigszins bekend bent met Perl-compatibele reguliere expressies (PCRE). Aangezien dat onderwerp buiten het bestek van dit artikel valt, raadpleegt u de Perl 5 versie 24.0 docs voor meer details over PCRE.
Zorg ervoor dat de herschrijfmodule is geladen voordat u doorgaat. Hoewel dit het standaardgedrag is in CentOS en soortgelijke distributies, in Debian en afgeleiden moet u het als volgt handmatig laden:
# a2enmod herschrijven.
Laten we voor de eenvoud de standaardsite gebruiken in a
CentOS 7 doos (IP 192.168.0.100) om uit te leggen hoe te gebruiken 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:
Rewrite Engine aan.
Het is belangrijk op te merken dat deze configuratie niet wordt overgenomen door: virtuele hosts in dezelfde doos.
U moet dus toevoegen HerschrijfEngine ingeschakeld voor elke virtuele host waar u herschrijfregels wilt gebruiken.
Een interne omleiding is het eenvoudigste voorbeeld van: mod_rewrite. Als u alle verzoeken om wilt omleiden standaard.aspx tot index.html, voeg de volgende regel toe (ook bekend als een herschrijfregel) onder HerschrijfEngine Aan:
RewriteRule "^/default\.aspx$" "/index.html"
en vergeet niet Apache opnieuw te starten om de wijzigingen door te voeren.
Dit kan handig zijn als uw site oorspronkelijk is ontworpen met behulp van ADDER en later veranderd in gewoon HTML5. Zoekmachines hebben de .aspx
bestand geïndexeerd, 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 te testen een eenvoudig HTML-bestand maken met de naam index.html
binnenkant /var/www/html met de volgende inhoud:
Nieuwe site Default.aspx was hier, maar nu is het index.html
De caret en dollar tekens zorgen ervoor dat de reguliere expressie overeenkomt met elke tekenreeks die begint met /default
en eindigend met .aspx
, respectievelijk.
Voorgesteld lezen:Installeer Mod_Pagespeed om Apache-prestaties tot 10x te versnellen
Start nu uw browser en wijs deze naar 192.168.0.100/default.aspx. Als de dingen gaan zoals verwacht, zou Apache moeten dienen index.html
in plaats daarvan.
De eindgebruiker zal echter nog steeds zien standaard.aspx
in de adresbalk waardoor de wijziging volledig transparant is:
Als u wilt dat de URL in de adresbalk laat zien dat de server deze daadwerkelijk bedient index.html
in plaats van een pagina met de naam standaard.aspx
, toevoegen [R, L]
aan het einde van de herschrijfregel als volgt:
RewriteRule "^/default\.aspx$" "/index.html" [R, L]
Hier [R, L]
zijn twee optionele vlaggen die aangeven dat een volledige HTTP-omleiding naar de browser moet worden verzonden (R)
en dat er geen verdere regels mogen worden verwerkt:
Let op hoe de adresbalk nu wordt weergegeven index.html
, zoals verwacht, in plaats van standaard.aspx
zoals het eerder deed.
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 aangepaste inhoud weergeven op basis van de browser van de gebruiker. Raadpleeg tot die tijd de Apache 2.4-documenten voor een volledige lijst van de beschikbare herschrijf vlaggen.
Zoals altijd, voel je vrij om het onderstaande reactieformulier te gebruiken als je vragen of feedback hebt over dit artikel. We horen graag van u!