Kaip atlikti vidinį peradresavimą naudojant mod_rewrite programoje Apache


Šiame ir kitame straipsnyje paaiškinsime, kaip naudoti mod_rewrite, susieti tam tikras HTTP užklausas su kitais svetainės puslapiais arba išoriniu URL.

Kitaip tariant, šis gerai žinomas Apache modulis leis nukreipti URL į kitą, kurį iliustruosime praktiniais pavyzdžiais.

Siūlomas skaitymas: 5 patarimai, kaip padidinti „Apache“ žiniatinklio serverio našumą

PASTABA: toliau pateikiamuose pavyzdžiuose daroma prielaida, kad esate bent šiek tiek susipažinę su Perl suderinamomis reguliariosiomis išraiškomis (PCRE). Kadangi ši tema nepatenka į šio straipsnio taikymo sritį, daugiau informacijos apie PCRE rasite Perl 5 versijos 24.0 dokumentuose.

Prieš tęsdami įsitikinkite, kad perrašymo modulis įkeltas. Nors tai yra numatytoji elgsena CentOS ir panašiuose platinimuose, Debian ir išvestinėse versijose turėsite ją įkelti rankiniu būdu, kaip nurodyta toliau:

a2enmod rewrite

„Apache“ konfigūravimas naudoti mod_rewrite modulį

Kad būtų paprasčiau, naudokite numatytąją svetainę CentOS 7 laukelyje (IP 192.168.0.100), kad paaiškintume, kaip naudoti mod_rewrite ( DocumentRoot: /var/www/html, konfigūracijos failas: /etc/httpd/conf/httpd.conf).

Kad Apache naudotų šį modulį, į konfigūracijos failą pridėkite šią eilutę:

RewriteEngine on

Svarbu pažymėti, kad šios konfigūracijos nepaveldės toje pačioje dėžutėje esantys virtualūs kompiuteriai.

Taigi kiekvienam virtualiam kompiuteriui, kuriame norite naudoti perrašymo taisykles, turėsite pridėti RewriteEngine.

Vidinis peradresavimas: URL susiejimas su kitu toje pačioje virtualioje priegloboje

Vidinis peradresavimas yra paprasčiausias mod_rewrite pavyzdys. Jei norite peradresuoti visas default.aspx užklausas į index.html, skiltyje RewriteEngine pridėkite šią eilutę (taip pat žinomą kaip perrašymo taisyklę). > ant:

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

ir nepamirškite iš naujo paleisti „Apache“, kad pakeitimai įsigaliotų.

Tai gali būti naudinga, jei svetainė iš pradžių buvo sukurta naudojant ASP, o vėliau pakeista į paprastą HTML5. Paieškos sistemose bus indeksuotas .aspx failas, tačiau to failo nebėra.

Tokiu atveju turėsite rasti būdą, kaip peradresuoti užklausą, kad jūsų būsimi lankytojai nepatektų į klaidos puslapį. Norėdami išbandyti, sukurkime paprastą HTML failą pavadinimu index.html, esantį /var/www/html su tokiu turiniu:

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

Dėl ženklų caret ir dollar reguliarusis reiškinys atitiks bet kurią eilutę, prasidedančią /default ir baigiasi .aspx > atitinkamai.

Siūlomas skaitymas: įdiekite „Mod_Pagespeed“, kad pagreitintumėte „Apache“ našumą iki 10 kartų

Dabar paleiskite naršyklę ir nukreipkite ją į 192.168.0.100/default.aspx. Jei viskas vyksta taip, kaip tikėtasi, „Apache“ turėtų pateikti index.html.
Tačiau galutinis vartotojas vis tiek matys default.aspx adreso juostoje, todėl pakeitimas bus visiškai skaidrus:

Jei norite, kad URL adreso juostoje parodytų, kad serveris iš tikrųjų aptarnauja index.html, o ne puslapį pavadinimu default.aspx, pridėkite [R, L] iki perrašymo taisyklės pabaigos taip:

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

Čia [R,L] yra dvi pasirenkamos vėliavėlės, nurodančios, kad naršyklei (R) turi būti išsiųstas visas HTTP peradresavimas ir kad neturėtų būti apdorojama jokių kitų taisyklių:

Atkreipkite dėmesį, kaip adreso juostoje dabar rodoma index.html, kaip tikėtasi, o ne default.aspx, kaip anksčiau.

Santrauka

Šiame straipsnyje paaiškinome, kaip naudoti mod_rewrite atlikti vidinį peradresavimą. Stebėkite kitą įrašą, kuriame sužinosime, kaip peradresuoti į šaltinį, kuris buvo perkeltas į kitą serverį, ir kaip rodyti tinkintą turinį pagal vartotojo naršyklę. Iki tol visą galimų perrašymo vėliavėlių sąrašą rasite Apache 2.4 dokumentuose.

Kaip visada, nedvejodami naudokite toliau pateiktą komentarų formą, jei turite klausimų ar atsiliepimų apie šį straipsnį. Lauksime jūsų žinučių!