Hvordan utføre intern omdirigering med mod_rewrite i Apache


I denne artikkelen og i den neste vil vi forklare hvordan du bruker mod_rewrite, for å kartlegge visse HTTP-forespørsler til andre sider på et nettsted, eller til en ekstern URL.

Med andre ord vil denne velkjente Apache-modulen tillate deg å omdirigere en URL til en annen, som vi vil illustrere gjennom praktiske eksempler.

MERK: Eksemplene nedenfor antar at du i det minste er litt kjent med Perl Compatible Regular Expressions (PCRE). Siden dette emnet er utenfor rammen av denne artikkelen, se Perl 5 versjon 24.0-dokumentene for mer informasjon om PCRE.

Før du fortsetter, sørg for at omskrivingsmodulen er lastet. Selv om dette er standardoppførselen i CentOS og lignende distribusjoner, i Debian og derivater må du laste den manuelt som følger:

# a2enmod rewrite

Konfigurere Apache til å bruke mod_rewrite-modulen

For enkelhets skyld, la oss bruke standardnettstedet i en CentOS 7-boks (IP 192.168.0.100) for å forklare hvordan du bruker mod_rewrite (DocumentRoot: /var/www/html, konfigurasjonsfil: /etc/httpd/conf/httpd.conf).

For at Apache skal bruke denne modulen, legg til følgende linje i konfigurasjonsfilen:

RewriteEngine on

Det er viktig å merke seg at denne konfigurasjonen ikke vil bli arvet av virtuelle verter i samme boks.

Dermed må du legge til RewriteEngine på for hver virtuelle vert der du vil bruke omskrivingsregler.

En intern omdirigering er det enkleste eksemplet på mod_rewrite. Hvis du vil omdirigere alle forespørsler for default.aspx til index.html, legg til følgende linje (også kjent som en omskrivingsregel) under RewriteEngine på:

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

og ikke glem å starte Apache på nytt for at endringene skal tre i kraft.

Dette kan være nyttig hvis nettstedet ditt opprinnelig ble designet med ASP og senere endret til vanlig HTML5. Søkemotorer vil ha .aspx-filen indeksert, men den filen eksisterer ikke lenger.

I så fall må du finne en måte å omdirigere forespørselen på, slik at dine potensielle besøkende ikke kommer inn på en feilside. For å teste, la oss lage en enkel HTML-fil kalt index.html inne i /var/www/html med følgende innhold:

<!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>

Caret- og dollartegnet vil føre til at det regulære uttrykket samsvarer med en hvilken som helst streng som begynner med henholdsvis /default og slutter med .aspx.

Start nå nettleseren din og pek den til 192.168.0.100/default.aspx. Hvis ting går som forventet, bør Apache vise index.html i stedet.
Sluttbrukeren vil imidlertid fortsatt se default.aspx i adressefeltet, noe som gjør at endringen blir helt gjennomsiktig:

Hvis du vil at URL-en i adressefeltet skal vise at serveren den faktisk betjener index.html i stedet for en side kalt default.aspx, legg til [R, L] til slutten av omskrivingsregelen som følger:

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

Her er [R,L] to valgfrie flagg som indikerer at en fullstendig HTTP-omdirigering skal sendes til nettleseren (R) og at ingen ytterligere regler skal behandles:

Legg merke til hvordan adresselinjen nå viser index.html, som forventet, i stedet for default.aspx som den gjorde tidligere.

I denne artikkelen forklarte vi hvordan du bruker mod_rewrite til å utføre intern omdirigering. Følg med på neste innlegg hvor vi lærer hvordan du omdirigerer til en ressurs som har blitt flyttet til en annen server, og hvordan du omskriver flagg.

Som alltid, bruk gjerne kommentarskjemaet nedenfor hvis du har spørsmål eller tilbakemeldinger om denne artikkelen. Vi ser frem til å høre fra deg!