Kuidas teostada Apache'is sisemist ümbersuunamist mod_rewrite abil


Selles artiklis ja järgmises selgitame, kuidas kasutada mod_rewrite'i, teatud HTTP-päringute kaardistamist veebisaidi teistele lehtedele või välisele URL-ile.

Teisisõnu, see tuntud Apache moodul võimaldab teil URL-i teisele suunata, mida illustreerime praktiliste näidete kaudu.

MÄRKUS. Alljärgnevates näidetes eeldatakse, et olete vähemalt mõnevõrra tuttav Perli ühilduvate regulaaravaldistega (PCRE). Kuna see teema ei kuulu selle artikli reguleerimisalasse, lugege PCRE kohta lisateavet Perl 5 versiooni 24.0 dokumentidest.

Enne jätkamist veenduge, et ümberkirjutamise moodul on laaditud. Kuigi see on CentOS-i ja sarnaste jaotuste vaikekäitumine, peate Debianis ja derivaatides selle käsitsi laadima järgmiselt:

# a2enmod rewrite

Apache'i seadistamine mod_rewrite mooduli kasutamiseks

Kasutage lihtsuse huvides CentOS 7 kasti vaikesait (IP 192.168.0.100), et selgitada mod_rewrite'i kasutamist (DocumentRoot:/var/www/html, konfiguratsioonifail: /etc/httpd/conf/httpd.conf).

Selleks, et Apache saaks seda moodulit kasutada, lisage konfiguratsioonifaili järgmine rida:

RewriteEngine on

Oluline on märkida, et seda konfiguratsiooni ei päri virtuaalsed hostid samas kastis.

Seega peate lisama RewriteEngine iga virtuaalse masina jaoks, kuhu soovite reegleid kirjutada.

Sisemine ümbersuunamine on mod_rewrite lihtsaim näide. Kui soovite suunata kõik default.aspxi taotlused index.html-i, lisage RewriteEngine alla järgmine rida (tuntud ka kui rewrite-reegel):

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

muudatuste jõustumiseks ärge unustage Apache'i taaskäivitada.

See võib olla kasulik, kui teie sait kujundati algselt ASP-i kasutades ja muudeti hiljem tavaliseks HTML5-ks. Otsingumootorites indekseeritakse fail .aspx , kuid seda faili pole enam olemas.

Sellisel juhul peate leidma viisi, kuidas taotlus ümber suunata, et teie potentsiaalsed külastajad ei satuks vealehele. Testimiseks loome/var/www/html sisse järgmise sisuga lihtsa HTML-faili nimega index.html :

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

Ämbli- ja dollarimärgid viivad regulaaravaldise vastavusse mis tahes stringiga, mis algab vastavalt /default ja lõpeb vastavalt .aspx .

Nüüd käivitage oma brauser ja suunake see aadressile 192.168.0.100/default.aspx. Kui asjad lähevad ootuspäraselt, peaks Apache selle asemel pakkuma index.html .
Lõppkasutaja näeb aadressiribal siiski default.aspx , mis muudab muudatuse täiesti läbipaistvaks:

Kui soovite, et aadressiribal olev URL näitaks, et server, mida see tegelikult teenib, on index.html lehe nimega default.aspx , lisage [R, L] ümberkirjutamise reegli lõpuni järgmiselt:

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

Siin on [R, L] kaks valikulist lippu, mis näitavad, et brauserile (R) tuleks anda täielik HTTP ümbersuunamine ja muid reegleid ei tohiks töödelda:

Pange tähele, kuidas aadressiriba näitab nüüd ootuspäraselt index.html , mitte varem, nagu default.aspx .

Selles artiklis selgitasime, kuidas mod_rewrite'i kasutada sisemise ümbersuunamise teostamiseks. Jälgige järgmist postitust, kus õpime, kuidas suunata ressurssi, mis on teisaldatud teise serverisse, ja kuidas lippe ümber kirjutada.

Nagu alati, võite julgelt kasutada allolevat kommentaarivormi, kui teil on selle artikli kohta küsimusi või tagasisidet. Ootame teid huviga!