Kako izvršiti interno preusmjeravanje sa mod_rewrite u Apacheu


U ovom i sljedećem članku ćemo objasniti kako koristiti mod_rewrite, za mapiranje određenih HTTP zahtjeva na druge stranice na web stranici ili na vanjski URL.

Drugim riječima, ovaj dobro poznati Apache modul će vam omogućiti da preusmjerite URL na drugi, što ćemo ilustrovati kroz praktične primjere.

Preporučeno čitanje: 5 savjeta za poboljšanje performansi vašeg Apache web servera

NAPOMENA: Primjeri u nastavku pretpostavljaju da ste barem donekle upoznati sa Perl kompatibilnim regularnim izrazima (PCRE). Pošto ta tema nije obuhvaćena ovim člankom, pogledajte dokumente Perl 5 verzije 24.0 za više detalja o PCRE-u.

Prije nego što nastavite, provjerite je li modul za ponovno pisanje učitan. Iako je ovo zadano ponašanje u CentOS i sličnim distribucijama, u Debianu i derivatima morat ćete ga ručno učitati na sljedeći način:

a2enmod rewrite

Konfiguriranje Apachea za korištenje modula mod_rewrite

Radi jednostavnosti, koristimo zadanu stranicu u CentOS 7 kutiji (IP 192.168.0.100) da objasnimo kako koristiti mod_rewrite ( DocumentRoot: /var/www/html, konfiguracijski fajl: /etc/httpd/conf/httpd.conf).

Da bi Apache koristio ovaj modul, dodajte sljedeći red u konfiguracijski fajl:

RewriteEngine on

Važno je napomenuti da ovu konfiguraciju neće naslijediti virtualni domaćini u istom polju.

Stoga ćete morati dodati RewriteEngine za svaki virtuelni host gdje želite koristiti pravila ponovnog pisanja.

Interno preusmjeravanje: mapiranje URL-a na drugi u istom virtuelnom hostu

Interno preusmjeravanje je najjednostavniji primjer mod_rewrite. Ako želite preusmjeriti sve zahtjeve za default.aspx na index.html, dodajte sljedeći red (također poznat kao pravilo ponovnog pisanja) pod RewriteEngine > na:

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

i ne zaboravite ponovo pokrenuti Apache kako bi promjene stupile na snagu.

Ovo može biti korisno ako je vaša web lokacija izvorno dizajnirana pomoću ASP-a, a kasnije promijenjena u običan HTML5. Pretraživači će imati indeksiranu datoteku .aspx, ali ta datoteka više ne postoji.

U tom slučaju, morat ćete pronaći način da preusmjerite zahtjev tako da vaši potencijalni posjetitelji ne naiđu na stranicu s greškom. Za testiranje, napravimo jednostavnu HTML datoteku pod nazivom index.html unutar /var/www/html sa sljedećim sadržajem:

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

Znakovi caret i dollar će uzrokovati da se regularni izraz podudara sa bilo kojim nizom koji počinje sa /default i završava sa .aspx, respektivno.

Preporučeno čitanje: Instalirajte Mod_Pagespeed da ubrzate Apache performanse do 10x

Sada pokrenite pretraživač i usmjerite ga na 192.168.0.100/default.aspx. Ako stvari idu kako se očekuje, Apache bi umjesto toga trebao poslužiti index.html.
Međutim, krajnji korisnik će i dalje vidjeti default.aspx u adresnoj traci, uzrokujući da promjena bude potpuno transparentna:

Ako želite da URL u adresnoj traci pokazuje da server zapravo opslužuje index.html umjesto stranice pod nazivom default.aspx, dodajte [R, L] do kraja pravila ponovnog pisanja na sljedeći način:

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

Ovdje [R,L] su dvije neobavezne zastavice koje ukazuju na to da bi kompletno HTTP preusmjeravanje trebalo biti izdato pregledniku (R) i da se nikakva daljnja pravila ne trebaju obraditi:

Obratite pažnju kako adresna traka sada prikazuje index.html, kao što se očekivalo, umjesto default.aspx kao što je to bilo ranije.

Sažetak

U ovom članku smo objasnili kako koristiti mod_rewrite za izvođenje internog preusmjeravanja. Pratite nas za sljedeći post u kojem ćemo naučiti kako da preusmjerimo na resurs koji je premješten na drugi server i kako prikazati prilagođeni sadržaj na osnovu pretraživača korisnika. Do tada, pogledajte dokumente Apache 2.4 za potpunu listu dostupnih oznaka za ponovno pisanje.

Kao i uvijek, slobodno koristite formular za komentare u nastavku ako imate pitanja ili povratne informacije o ovom članku. Radujemo se Vašem odgovoru!