Kā veikt iekšēju novirzīšanu ar mod_rewrite Apache


Šajā rakstā un nākamajā mēs paskaidrosim, kā izmantot mod_rewrite, noteiktu HTTP pieprasījumu kartēšanu uz citām vietnes lapām vai ārēju URL.

Citiem vārdiem sakot, šis labi pazīstamais Apache modulis ļaus jums novirzīt URL uz citu, ko mēs ilustrēsim, izmantojot praktiskus piemērus.

PIEZĪME. Turpmāk sniegtajos piemēros tiek pieņemts, ka jūs vismaz zināmā mērā pārzināt Perla saderīgās regulārās izteiksmes (PCRE). Tā kā šī tēma ir ārpus šī raksta darbības jomas, skatiet Perl 5 versijas 24.0 dokumentus, lai iegūtu sīkāku informāciju par PCRE.

Pirms turpināt, pārliecinieties, vai pārrakstīšanas modulis ir ielādēts. Lai gan tā ir noklusējuma darbība CentOS un līdzīgos sadalījumos, Debian un atvasinātajos instrumentos tā būs jāielādē manuāli šādi:

# a2enmod rewrite

Apache konfigurēšana mod_rewrite moduļa lietošanai

Vienkāršības labad izmantojiet noklusējuma vietni CentOS 7 lodziņā (IP 192.168.0.100), lai paskaidrotu, kā izmantot mod_rewrite (DocumentRoot:/var/www/html, konfigurācijas fails: /etc/httpd/conf/httpd.conf).

Lai Apache varētu izmantot šo moduli, pievienojiet konfigurācijas failam šādu rindu:

RewriteEngine on

Ir svarīgi atzīmēt, ka šo konfigurāciju nemantos virtuālie resursdatori tajā pašā lodziņā.

Tādējādi katram virtuālajam resursdatoram, kurā vēlaties izmantot pārrakstīšanas kārtulas, jums būs jāpievieno RewriteEngine.

Iekšējā novirzīšana ir vienkāršākais mod_rewrite piemērs. Ja vēlaties novirzīt visus default.aspx pieprasījumus uz index.html, sadaļā RewriteEngine pievienojiet šādu rindu (sauktu arī par pārrakstīšanas kārtulu):

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

un neaizmirstiet restartēt Apache, lai izmaiņas stātos spēkā.

Tas var būt noderīgi, ja jūsu vietne sākotnēji tika veidota, izmantojot ASP, un vēlāk tika mainīta uz vienkāršu HTML5. Meklētājprogrammās tiks indeksēts fails .aspx , taču šī faila vairs nav.

Tādā gadījumā jums būs jāatrod veids, kā novirzīt pieprasījumu, lai potenciālie apmeklētāji netiktu iekļauti kļūdas lapā. Lai pārbaudītu, izveidosim vienkāršu HTML failu ar nosaukumu index.html /var/www/html ar šādu saturu:

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

Pielikuma un dolāra zīmes dēļ regulārā izteiksme sakritīs ar jebkuru virkni, kas sākas attiecīgi ar /default un beidzas ar .aspx .

Tagad palaidiet pārlūkprogrammu un norādiet to uz 192.168.0.100/default.aspx. Ja viss notiek, kā paredzēts, Apache tā vietā vajadzētu kalpot index.html .
Tomēr galalietotājs adreses joslā joprojām redzēs default.aspx , izraisot izmaiņu pilnīgu pārredzamību:

Ja vēlaties, lai URL adreses joslā parādītu, ka serveris, kuru tas faktiski apkalpo index.html , nevis lapu ar nosaukumu default.aspx , pievienojiet [R, L] līdz pārrakstīšanas kārtulas beigām šādi:

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

Šeit [R, L] ir divi izvēles karodziņi, kas norāda, ka pārlūkprogrammai (R) ir jāpiešķir pilnīga HTTP novirzīšana un ka citi noteikumi nav jāapstrādā:

Ievērojiet, kā adreses joslā, kā paredzēts, tagad tiek parādīts index.html , nevis default.aspx , kā tas bija iepriekš.

Šajā rakstā mēs paskaidrojām, kā izmantot mod_rewrite, lai veiktu iekšēju novirzīšanu. Sekojiet līdzi nākamajai ziņai, kurā mēs uzzināsim, kā novirzīt uz resursu, kas ir pārvietots uz citu serveri, un kā pārrakstīt karodziņus.

Kā vienmēr, nekautrējieties izmantot zemāk esošo komentāru veidlapu, ja jums ir kādi jautājumi vai atsauksmes par šo rakstu. Mēs ceram uz jums atbildi!