Sådan udføres intern omdirigering med mod_rewrite i Apache


I denne artikel og i den næste vil vi forklare, hvordan man bruger mod_rewrite, til at kortlægge bestemte HTTP-anmodninger til andre sider på et websted eller til en ekstern URL.

Med andre ord, dette velkendte Apache-modul giver dig mulighed for at omdirigere en URL til en anden, som vi vil illustrere gennem praktiske eksempler.

BEMÆRK: Eksemplerne nedenfor antager, at du i det mindste er fortrolig med Perl Compatible Regular Expressions (PCRE). Da dette emne er uden for denne artikels anvendelsesområde, henvises til Perl 5 version 24.0 docs for flere detaljer om PCRE.

Før du fortsætter, skal du sikre dig, at omskrivningsmodulet er indlæst. Selvom dette er standardadfærden i CentOS og lignende distributioner, skal du i Debian og derivater indlæse den manuelt som følger:

# a2enmod rewrite

Konfiguration af Apache til at bruge mod_rewrite Module

For nemheds skyld skal vi bruge standardwebstedet i et CentOS 7-felt (IP 192.168.0.100) til at forklare, hvordan man bruger mod_rewrite (DocumentRoot:/var/www/html, konfigurationsfil: /etc/httpd/conf/httpd.conf).

For at Apache kan bruge dette modul, skal du tilføje følgende linje til konfigurationsfilen:

RewriteEngine on

Det er vigtigt at bemærke, at denne konfiguration ikke arves af virtuelle værter i samme boks.

Således bliver du nødt til at tilføje RewriteEngine til for hver virtuel vært, hvor du vil bruge omskrivningsregler.

En intern omdirigering er det enkleste eksempel på mod_rewrite. Hvis du vil omdirigere alle anmodninger om default.aspx til index.html, skal du tilføje følgende linje (også kendt som en omskrivningsregel) under RewriteEngine på:

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

og glem ikke at genstarte Apache for at ændringerne skal træde i kraft.

Dette kan være nyttigt, hvis dit websted oprindeligt blev designet ved hjælp af ASP og senere blev ændret til almindelig HTML5. Søgemaskiner vil have .aspx -filen indekseret, men filen findes ikke mere.

I så fald skal du finde en måde at omdirigere anmodningen på, så dine potentielle besøgende ikke løber ind på en fejlside. For at teste, lad os oprette en simpel HTML-fil med navnet index.html inde i/var/www/html med følgende indhold:

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

Tegn og dollartegn får det regulære udtryk til at matche enhver streng, der henholdsvis begynder med /standard og slutter med .aspx .

Start nu din browser og peg den til 192.168.0.100/default.aspx. Hvis tingene går som forventet, skal Apache i stedet tjene index.html .
Slutbrugeren vil dog stadig se default.aspx i adresselinjen, hvilket får ændringen til at være fuldstændig gennemsigtig:

Hvis du vil have URL-adressen i adresselinjen til at vise, at serveren den faktisk betjener index.html i stedet for en side med navnet default.aspx , skal du tilføje [R, L] til slutningen af omskrivningsreglen som følger:

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

Her er [R, L] to valgfri flag, der angiver, at en komplet HTTP-omdirigering skal udstedes til browseren (R) , og at der ikke skal behandles yderligere regler:

Bemærk, hvordan adresselinjen nu viser index.html som forventet i stedet for default.aspx som det gjorde tidligere.

I denne artikel forklarede vi, hvordan man bruger mod_rewrite til at udføre intern omdirigering. Hold øje med det næste indlæg, hvor vi lærer, hvordan man omdirigerer til en ressource, der er flyttet til en anden server, og hvordan man omskriver flag.

Som altid er du velkommen til at bruge kommentarformularen nedenfor, hvis du har spørgsmål eller feedback om denne artikel. Vi ser frem til at høre fra dig!