Kako izvesti interno preusmjeravanje s mod_rewrite u Apacheu


U ovom i sljedećem članku objasnit ćemo 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 omogućit će vam preusmjeravanje URL-a na drugi, što ćemo ilustrirati kroz praktične primjere.

Predloženo za čitanje: 5 savjeta za poboljšanje performansi vašeg Apache web poslužitelja

NAPOMENA: Primjeri ispod pretpostavljaju da ste barem donekle upoznati s regularnim izrazima kompatibilnim s Perlom (PCRE). Budući da je ta tema izvan opsega ovog članka, više detalja o PCRE-u potražite u dokumentima za Perl 5 verziju 24.0.

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

a2enmod rewrite

Konfiguriranje Apachea za korištenje mod_rewrite modula

Radi jednostavnosti, upotrijebimo zadanu stranicu u okviru CentOS 7 (IP 192.168.0.100) da objasnimo kako koristiti mod_rewrite ( DocumentRoot: /var/www/html, konfiguracijska datoteka: /etc/httpd/conf/httpd.conf).

Kako bi Apache mogao koristiti ovaj modul, dodajte sljedeći red u konfiguracijsku datoteku:

RewriteEngine on

Važno je napomenuti da ovu konfiguraciju neće naslijediti virtualni hostovi u istom okviru.

Stoga ćete morati dodati RewriteEngine za svaki virtualni host na kojem želite koristiti pravila prepisivanja.

Interno preusmjeravanje: preslikavanje URL-a na drugi u istom virtualnom hostu

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

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

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

Ovo bi moglo biti korisno ako je vaša web-lokacija izvorno dizajnirana pomoću ASP-a i kasnije promijenjena u običan HTML5. Tražilice ć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 pogreškom. Za testiranje, stvorimo 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 uzrokovat će podudaranje regularnog izraza s bilo kojim nizom koji počinje s /default i završava s .aspx, odnosno.

Predloženo za čitanje: Instalirajte Mod_Pagespeed da biste ubrzali rad Apachea do 10x

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

Ako želite da URL u adresnoj traci pokazuje da poslužitelj koji zapravo poslužuje index.html umjesto stranice pod nazivom default.aspx, dodajte [R, L] do kraja pravila prepisivanja kako slijedi:

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

Ovdje su [R,L] dvije opcijske zastavice koje označavaju da se potpuno HTTP preusmjeravanje treba izdati pregledniku (R) i da se ne smiju obrađivati daljnja pravila:

Obratite pažnju na to kako adresna traka sada prikazuje index.html, kao što je i očekivano, umjesto default.aspx kao ranije.

Sažetak

U ovom smo članku objasnili kako koristiti mod_rewrite za izvođenje internog preusmjeravanja. Očekujte sljedeći post u kojem ćemo naučiti kako preusmjeriti na resurs koji je premješten na drugi poslužitelj i kako prikazati prilagođeni sadržaj na temelju preglednika korisnika. Do tada, pogledajte dokumente Apache 2.4 za potpuni popis dostupnih zastavica za prepisivanje.

Kao i uvijek, slobodno upotrijebite obrazac za komentare u nastavku ako imate pitanja ili povratnih informacija o ovom članku. Radujemo se vašem odgovoru!