Cum se efectuează redirecționarea internă cu mod_rewrite în Apache


În acest articol și în următorul vom explica cum să folosiți mod_rewrite, pentru a mapa anumite solicitări HTTP către alte pagini dintr-un site web sau către o adresă URL externă.

Cu alte cuvinte, acest binecunoscut modul Apache vă va permite să redirecționați un URL către altul, pe care îl vom ilustra prin exemple practice.

Lectură sugerată: 5 sfaturi pentru a crește performanța serverului dvs. web Apache

NOTĂ: exemplele de mai jos presupun că sunteți cel puțin oarecum familiarizat cu Expresiile regulate compatibile cu Perl (PCRE). Întrucât acest subiect nu face obiectul acestui articol, consultați documentele Perl 5 versiunea 24.0 pentru mai multe detalii despre PCRE.

Înainte de a continua, asigurați-vă că modulul de rescriere este încărcat. Deși acesta este comportamentul implicit în CentOS și în distribuții similare, în Debian și derivate va trebui să îl încărcați manual, după cum urmează:

a2enmod rewrite

Configurarea Apache pentru a utiliza modulul mod_rewrite

Pentru simplitate, să folosim site-ul implicit într-o casetă CentOS 7 (IP 192.168.0.100) pentru a explica cum să folosiți mod_rewrite ( DocumentRoot: /var/www/html, fișier de configurare: /etc/httpd/conf/httpd.conf).

Pentru ca Apache să folosească acest modul, adăugați următoarea linie la fișierul de configurare:

RewriteEngine on

Este important de reținut că această configurație nu va fi moștenită de gazdele virtuale din aceeași casetă.

Astfel, va trebui să adăugați RewriteEngine pentru fiecare gazdă virtuală în care doriți să utilizați regulile de rescriere.

Redirecționare internă: maparea unei adrese URL la alta în aceeași gazdă virtuală

O redirecționare internă este cel mai simplu exemplu de mod_rewrite. Dacă doriți să redirecționați toate solicitările pentru default.aspx către index.html, adăugați următoarea linie (cunoscută și ca regulă de rescriere) sub RewriteEngine > pe:

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

și nu uitați să reporniți Apache pentru ca modificările să intre în vigoare.

Acest lucru poate fi util dacă site-ul dvs. a fost proiectat inițial utilizând ASP și ulterior schimbat în HTML5 simplu. Motoarele de căutare vor avea fișierul .aspx indexat, dar acel fișier nu mai există.

În acest caz, va trebui să găsiți o modalitate de a redirecționa solicitarea, astfel încât potențialii dvs. vizitatori să nu întâlnească o pagină de eroare. Pentru a testa, să creăm un fișier HTML simplu numit index.html în interiorul /var/www/html cu următorul conținut:

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

Semnele caret și dolar vor face ca expresia regulată să se potrivească cu orice șir care începe cu /default și se termină cu .aspx, respectiv.

Lectură recomandată: Instalați Mod_Pagespeed pentru a accelera performanța Apache de până la 10 ori

Acum lansați browserul și direcționați-l către 192.168.0.100/default.aspx. Dacă lucrurile merg conform așteptărilor, Apache ar trebui să trimită index.html în schimb.
Cu toate acestea, utilizatorul final va vedea în continuare default.aspx în bara de adrese, ceea ce face ca modificarea să fie total transparentă:

Dacă doriți ca adresa URL din bara de adrese să arate că serverul servește de fapt index.html în loc de o pagină numită default.aspx, adăugați [R, L] până la sfârșitul regulii de rescriere, după cum urmează:

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

Aici [R,L] sunt două semnalizatoare opționale care indică faptul că o redirecționare HTTP completă trebuie emisă către browser (R) și că nu trebuie procesate alte reguli:

Observați cum bara de adrese arată acum index.html, așa cum era de așteptat, în loc de default.aspx așa cum a fost mai devreme.

rezumat

În acest articol, am explicat cum să utilizați mod_rewrite pentru a efectua redirecționarea internă. Rămâneți la curent pentru următoarea postare în care vom afla cum să redirecționăm către o resursă care a fost mutată pe un alt server și cum să afișam conținut personalizat pe baza browserului utilizatorului. Până atunci, consultați documentele Apache 2.4 pentru o listă completă a steagurilor de rescriere disponibile.

Ca întotdeauna, nu ezitați să utilizați formularul de comentarii de mai jos dacă aveți întrebări sau feedback despre acest articol. Asteptam sa auzim de tine!