Kako izvesti notranjo preusmeritev z mod_rewrite v Apacheju


V tem in naslednjem članku bomo razložili, kako uporabiti mod_rewrite, preslikati določene zahteve HTTP na druge strani na spletnem mestu ali na zunanji URL.

Z drugimi besedami, ta dobro znani modul Apache vam bo omogočil preusmeritev URL-ja na drugega, kar bomo ponazorili s praktičnimi primeri.

OPOMBA: V spodnjih primerih se domneva, da ste vsaj nekoliko seznanjeni z Perl združljivimi regularnimi izrazi (PCRE). Ker ta tema ne spada v obseg tega članka, glejte dokumentacijo Perl 5 različice 24.0 za več podrobnosti o PCRE.

Preden nadaljujete, se prepričajte, da je naložen modul za prepisovanje. Čeprav je to privzeto vedenje v CentOS in podobnih distribucijah, ga boste morali v Debianu in izpeljanih datotekah naložiti ročno, kot sledi:

# a2enmod rewrite

Konfiguriranje Apache za uporabo mod_rewrite modula

Za poenostavitev uporabimo privzeto spletno mesto v polju CentOS 7 (IP 192.168.0.100), da razložimo, kako uporabljati mod_rewrite (DocumentRoot:/var/www/html, konfiguracijska datoteka: /etc/httpd/conf/httpd.conf).

Če želite, da Apache uporablja ta modul, dodajte naslednjo vrstico v konfiguracijsko datoteko:

RewriteEngine on

Pomembno je vedeti, da navidezni gostitelji te konfiguracije ne bodo podedovali v istem polju.

Tako boste morali dodati RewriteEngine vklopljen za vsakega navideznega gostitelja, kjer želite uporabiti pravila prepisovanja.

Notranja preusmeritev je najpreprostejši primer mod_rewrite. Če želite preusmeriti vse zahteve za default.aspx na index.html, dodajte naslednjo vrstico (znano tudi kot pravilo za prepisovanje) pod RewriteEngine na:

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

in ne pozabite znova zagnati Apache, da bodo spremembe začele veljati.

To lahko pride v poštev, če je bilo vaše spletno mesto prvotno zasnovano z uporabo ASP in pozneje spremenjeno v navaden HTML5. Iskalniki bodo indeksirali datoteko .aspx , vendar ta datoteka ne obstaja več.

V tem primeru boste morali najti način za preusmeritev zahteve, tako da bodoči obiskovalci ne naletijo na stran z napako. Za preizkus ustvarimo preprosto datoteko HTML z imenom index.html znotraj/var/www/html z naslednjo vsebino:

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

Znaki za dotik in dolar bodo povzročili, da se regularni izraz ujema s katerim koli nizom, ki se začne z /default in konča z .aspx .

Zdaj zaženite brskalnik in ga usmerite na 192.168.0.100/default.aspx. Če gre vse po pričakovanjih, naj Apache namesto tega streže index.html .
Vendar bo končni uporabnik v naslovni vrstici še vedno videl default.aspx , zaradi česar bo sprememba popolnoma pregledna:

Če želite, da URL v naslovni vrstici prikazuje, da strežnik dejansko streže index.html namesto strani z imenom default.aspx , dodajte [R, L] na konec pravila prepisovanja, kot sledi:

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

Tu sta [R, L] dve neobvezni zastavici, ki označujeta, da je treba v brskalnik (R) izdati popolno preusmeritev HTTP in da ni treba obdelovati dodatnih pravil:

Upoštevajte, kako naslovna vrstica zdaj kaže index.html , kot je bilo pričakovano, namesto default.aspx , kot je bilo prej.

V tem članku smo razložili, kako uporabiti mod_rewrite za izvedbo notranje preusmeritve. Spremljajte naslednjo objavo, kjer se bomo naučili, kako preusmeriti na vir, ki je bil premaknjen na drug strežnik, in kako prepisati zastavice.

Kot vedno, če imate kakršna koli vprašanja ali povratne informacije o tem članku, uporabite spodnji obrazec za komentar. Veselimo se vaših odzivov!