Kuinka suorittaa sisäinen uudelleenohjaus mod_rewrite-komennolla Apachessa


Tässä ja seuraavassa artikkelissa selitämme, kuinka mod_rewrite-toimintoa käytetään tiettyjen HTTP-pyyntöjen yhdistämiseen verkkosivuston muille sivuille tai ulkoiseen URL-osoitteeseen.

Toisin sanoen tämän tunnetun Apache-moduulin avulla voit uudelleenohjata URL-osoitteen toiseen, mitä havainnollistamme käytännön esimerkein.

Suositeltu luku: 5 vinkkiä Apache-verkkopalvelimesi suorituskyvyn parantamiseen

HUOMAA: Alla olevissa esimerkeissä oletetaan, että olet ainakin jossain määrin perehtynyt Perl-yhteensopiviin säännöllisiin lausekkeisiin (PCRE). Koska tämä aihe ei kuulu tämän artikkelin piiriin, katso lisätietoja PCRE:stä Perl 5 -version 24.0 asiakirjoista.

Ennen kuin jatkat, varmista, että uudelleenkirjoitusmoduuli on ladattu. Vaikka tämä on oletuskäyttäytyminen CentOS:ssä ja vastaavissa jakeluissa, Debianissa ja johdannaisissa sinun on ladattava se manuaalisesti seuraavasti:

a2enmod rewrite

Apachen määrittäminen käyttämään mod_rewrite-moduulia

Selvitetään yksinkertaisuuden vuoksi CentOS 7 -ruudun (IP 192.168.0.100) oletussivustoa mod_rewrite- ( DocumentRoot: /var/www/html, asetustiedosto: /etc/httpd/conf/httpd.conf).

Jotta Apache voi käyttää tätä moduulia, lisää seuraava rivi määritystiedostoon:

RewriteEngine on

On tärkeää huomata, että samassa laatikossa olevat virtuaaliset isännät eivät peri tätä kokoonpanoa.

Siksi sinun on lisättävä RewriteEngine jokaiselle virtuaaliselle isännälle, jossa haluat käyttää uudelleenkirjoitussääntöjä.

Sisäinen uudelleenohjaus: URL-osoitteen yhdistäminen toiseen samassa virtuaalipalvelimessa

Sisäinen uudelleenohjaus on yksinkertaisin esimerkki mod_rewrite-funktiosta. Jos haluat ohjata kaikki default.aspx-pyynnöt osoitteeseen index.html, lisää seuraava rivi (tunnetaan myös uudelleenkirjoitussääntönä) kohtaan RewriteEngine. > päällä:

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

ja älä unohda käynnistää Apache uudelleen, jotta muutokset tulevat voimaan.

Tästä voi olla hyötyä, jos sivustosi suunniteltiin alun perin ASP:llä ja muutettiin myöhemmin tavalliseksi HTML5ksi. Hakukoneet indeksoivat .aspx-tiedoston, mutta tiedostoa ei ole enää olemassa.

Siinä tapauksessa sinun on löydettävä tapa ohjata pyyntö uudelleen, jotta mahdolliset vierailijasi eivät joudu virhesivulle. Testaamista varten luodaan yksinkertainen HTML-tiedosto nimeltä index.html hakemistoon /var/www/html, jossa on seuraava sisältö:

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

caret- ja dollari-merkit saavat säännöllisen lausekkeen vastaamaan mitä tahansa merkkijonoa, joka alkaa /default ja päättyy .aspx > vastaavasti.

Suositeltu luku: Asenna Mod_Pagespeed nopeuttaaksesi Apachen suorituskykyä jopa 10x

Käynnistä nyt selain ja osoita se osoitteeseen 192.168.0.100/default.aspx. Jos asiat menevät odotetusti, Apachen pitäisi näyttää sen sijaan index.html.
Loppukäyttäjä näkee kuitenkin edelleen default.aspx osoiterivillä, mikä tekee muutoksista täysin läpinäkyvän:

Jos haluat osoitepalkin URL-osoitteen osoittavan, että palvelin todella palvelee index.html-osoitetta default.aspx-nimisen sivun sijaan, lisää [R, L] uudelleenkirjoitussäännön loppuun seuraavasti:

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

Tässä [R,L] on kaksi valinnaista lippua, jotka osoittavat, että täydellinen HTTP-uudelleenohjaus tulee lähettää selaimeen (R) ja ettei muita sääntöjä tule käsitellä:

Huomaa, että osoitepalkissa näkyy nyt odotetusti index.html default.aspx:n sijaan, kuten aiemmin.

Yhteenveto

Tässä artikkelissa selitimme, kuinka mod_rewrite-komentoa käytetään sisäisen uudelleenohjauksen suorittamiseen. Pysy kuulolla seuraavaa viestiä varten, jossa opimme ohjaamaan resurssiin, joka on siirretty toiselle palvelimelle, ja kuinka näyttää mukautettua sisältöä käyttäjän selaimen perusteella. Siihen asti katso Apache 2.4 -dokumenteista täydellinen luettelo käytettävissä olevista uudelleenkirjoituslippuista.

Kuten aina, voit käyttää alla olevaa kommenttilomaketta, jos sinulla on kysyttävää tai palautetta tästä artikkelista. Me odotamme yhteydenottoasi!