Se instalează rescrierea modului. Activați modulul de rescriere mod în Apache

Acasă / Windows 7

Gândește-te la ultima ta vizită la un magazin online. După ce ați găsit produsul pe care îl căutați, probabil veți vedea o adresă URL ca aceasta:

Acest lucru se întâmplă nu pentru că dezvoltatorii acestui site au petrecut mult timp creând directoare separate pentru diferite categorii de produse, ci datorită unui modul convenabil numit mod_rewrite. Acest modul vă permite să creați adrese URL personalizate și simplificate. URL-ul arată de fapt cam așa:

http://www.buy-online.com/gp/itemB004RYVI0Q/ref=as_li_ss_tl?

Acest ghid acoperă activarea acestui modul, crearea și utilizarea unei pagini .htaccess și configurarea rescrierea URL-ului.

Cerințe

În plus, mai întâi trebuie să instalați apache. Pentru instalare rapidă al acestui server web în Ubuntu utilizați comanda:

sudo apt-get install apache2

1: Activați mod_rewrite

Mai întâi trebuie să activați mod_rewrite, este foarte simplu:

sudo a2enmod rescrie

Această comandă va activa modulul sau va afișa mesajul „Rescrierea modulului deja activată” dacă modulul este deja activat.

2: Ce este .htaccess?

Odată ce modulul a fost activat, puteți configura rescrierea legăturilor prin crearea unui fișier .htaccess în directorul site-ului.

Fișierul .htaccess este calea reglaj fin site-ul fără a fi nevoie să schimbați fișierele de configurare a serverului. Punctul care începe numele fișierului înseamnă că fișierul este ascuns.

În plus, plasarea fișierului .htaccess este importantă, deoarece setările acestui fișier vor afecta toate fișierele și subdirectoarele directorului în care se află.

Puteți crea un fișier .htaccess folosind editor de text, apoi încărcați-l pe site folosind un client ftp.

Vă rugăm să rețineți: fisierul trebuie numit exact .htaccess; Numele fișierului nu trebuie să conțină extensii suplimentare.

Alternativ, puteți crea un fișier .htaccess prin terminal folosind această comandă, înlocuind example.com nume de domeniu site-ul.

Inclusiv fișierul .htaccess

Pentru a permite înlocuirea fișierului .htaccess setări standard site, deschideți fișierul de configurare.

Nota: Acest lucru va necesita privilegii sudo ridicate.

sudo nano /etc/apache2/sites-available/default

În acest fișier, găsiți următoarea secțiune și modificați valoarea liniei AllowOverride (înlocuiți Niciunul cu Toate). Ca rezultat, secțiunea va arăta astfel:


Opțiuni Indexuri FollowSymLinks MultiViews
AllowOverride All
Comanda permite, refuza
permite de la toti

După salvarea modificărilor și închiderea fișierului, reporniți serverul apache. Acum fișierele .htacess sunt disponibile pentru toate site-urile de server.

sudo service apache2 reporniți

Acum sunteți gata să rescrieți adresele URL ale site-ului dvs.

3: Rescrierea adreselor URL

Întreaga operațiune de rescriere URL are loc în fișierul .htaccess. În general, toate comenzile de rescriere URL urmează același model:

RewriteRule Pattern Substitution

Opțiuni utilizate în această comandă:

  • RewriteRule: Aceasta este secțiunea în care puteți seta directivele necesare.
  • Model: Această secțiune este pentru interpretarea adresei URL dorite folosind expresii regulate. Acest tutorial nu acoperă expresiile regulate; unele informatii utile informatii despre acest subiect pot fi gasite pe site-ul Apache.
  • Înlocuire: afișează adresa URL reală a paginii. Acest link este greu de reținut deoarece constă din parametri PHP sau secvențe lungi de numere, de exemplu: www.bestshop.com/gadgets.php?innovation=laptops
  • Steaguri opționale: un steag este o etichetă la sfârșitul unei directive RewriteRule care poate schimba comportamentul unei expresii. Câteva semnalizări obișnuite: [F] nu permite adrese URL, ignoră literele majuscule sau controlează codul de redirecționare utilizat, [L] indică faptul că aceasta este ultima regulă dintr-o serie.

Exemple de rescriere URL

Exemplul 1: deschideți pagina A - ajungeți la pagina B

Acesta este cel mai elementar exemplu de rescriere a adresei URL: un vizitator al site-ului introduce o adresă URL în browser, dar este redirecționată către alta. Pentru a configura acest comportament, urmați instrucțiunile din această secțiune.

Pentru a începe, creați două pagini de site; de exemplu, primul este despre mere (apples.html), iar al doilea este despre portocale (oranges.html).

Copiați acest cod:



Merele


Această pagină este despre mere



Apoi creați oa doua pagină (în în acest caz,, pagina dedicata portocalelor). Pentru a face acest lucru, înlocuiți pur și simplu merele din acest bloc de cod cu portocale.

Apoi deschideți fișierul .htaccess:

sudo nano /var/www/example.com/.htaccess

Adăugați următoarele comenzi de rescriere URL:

RewriteEngine activat
RewriteRule ^oranges.html$ apples.html

Salvați și închideți fișierul.

Apoi vizitați pagina /oranges.html, aceasta va conține informațiile paginii /apples.html.

Să aruncăm o privire mai atentă la comanda de mai sus:

  • ^oranges.html: Specifică cum începe pagina dorită. Un accent (^) indică începutul unei linii. Cu alte cuvinte, dacă pagina a cărei adresă URL trebuia rescrisă începea diferit (de exemplu, oranges_1.html în loc de oranges.html), nu s-ar potrivi cu regula de rescriere și nu ar fi redirecționată către birds.html.
  • $: semnul dolar este plasat la sfârșitul adresei URL. Din nou, dacă șirul se termină diferit (de exemplu, conține orice caractere după ultimele caractere declarate), pagina web nu va fi recunoscută de regula de rescrire.
  • apples.html: browserul direcționează traficul către această pagină.

Exemplul 2: Parametru ca subdirector într-o adresă URL

Verificați adresa URL:

http://example.com/results.php?products=apple

Va fi mult mai clar afișat ca:

http://example.com/products/apple

Pentru a face acest lucru, trebuie să adăugați următoarele linii la .htaccess:

RewriteEngine activat
RewriteRule ^produse/(+)/?$ results.php?products=$1

Aceste linii constau din următoarele opțiuni:

  • ^produse: În acest caz, pentru a fi redirecționat, adresa URL trebuie să înceapă cu cuvântul produse (rețineți că acest lucru se aplică doar textului de după domeniu). Din nou, dacă adresa URL începe diferit, regula nu se va aplica.
  • (+): acest text între paranteze indică faptul că adresa URL poate consta din orice caracter. Semnul plus indică faptul că unul sau mai multe caractere pot fi incluse în paranteze.
  • /?$: Semnul dolarului marchează sfârșitul liniei. Semnul întrebării vă permite să puneți o bară oblică înainte la sfârșitul unei linii (deși acest lucru este opțional).
  • : Acesta este un steag la sfârșitul unei fraze care indică faptul că regula ar trebui să ignore cazurile tuturor caracterelor.

Exemplul 3: Configurarea legăturilor curate

Această funcție este utilă dacă adresele URL ale site-ului dvs. sunt prea lungi sau complexe.

Ca exemplu, puteți lua această adresă URL:

http://example.com/results.php?products=produce&type=fruit&species=apple

http://example.com/produce/fruit/apple

Pentru a face acest lucru, trebuie să adăugați următoarele linii la .htaccess (apropo, .htaccess poate conține un număr nelimitat de astfel de secțiuni):

RewriteEngine activat
RewriteRule ^(carne|produse|lactate)/([^/.]+)/([^/.]+)$ results.php?products=$1&type=$2&species=$3

Să ne uităm la acest cod mai detaliat:

  • Pătratul (simbolul ^) indică începutul unei expresii.
  • (carne|produse|lactate): Pentru a limita parametrii care pot fi afișați, specificați doar valorile permise între paranteze (în acest caz, carne, produse și lactate). Dacă adresa URL conține un parametru care nu este inclus în paranteze, rescrierea nu va avea loc.
  • ([^/.]+) indică faptul că totul, cu excepția caracterelor de după marcaj (în acest caz, oblică și punct) poate fi scris cu o oblică.
  • results.php?products=$1&type=$2&species=$3: Fiecare valoare din paranteze va fi extrasă și apoi inserată în URL-ul mai lung din partea de înlocuire. $1 indică primele paranteze, $2 – al doilea, $3 – respectiv al treilea.

Continuarea articolului poate fi găsită.

Etichete: ,

În acest tutorial, vom învăța cum să gestionăm rescrierea URL-ului folosind Apache 2 și modulul mod_rewrite. Acest modul vă permite să rescrieți adresele URL într-o manieră mai curată, traducând căi care pot fi citite de om în șiruri de interogări prietenoase cu codul sau redirecționând adresele URL în funcție de condiții suplimentare.

Acest ghid este împărțit în două părți. Primul creează un exemplu de site web și arată un exemplu simplu de rescriere. A doua parte conține două exemple mai aprofundate de reguli de rescriere utilizate în mod obișnuit.

Cerințe preliminare

Urmând acest ghid, veți avea nevoie de:

  • Unul Serverul Debian 8 instalat cu configurarea inițială a serverului.
  • Apache 2 instalat pe server, în urma articolului.

Pasul 1 – Activarea mod_rewrite

În primul rând, trebuie să activăm mod_rewrite. Este disponibil dar nu este inclus cu net instalarea Apache 2.

Sudo a2enmod rescrie

Activează modulul sau vă avertizează că modulul este deja activat. Reporniți Apache pentru ca modificările să intre în vigoare.

mod_rewrite este acum complet activat. În pasul următor, vom crea un fișier .htaccess pe care îl vom folosi pentru a defini regulile de rescriere pentru redirecționare.

Pasul 2 – Configurarea .htaccess

Fișierul .htaccess ne permite să ne schimbăm regulile de rescriere fără a accesa fișierele de configurare a serverului. Din acest motiv, .htaccess este esențial pentru securitatea aplicației dvs. web. Perioada care precede numele fișierului asigură că fișierul este ascuns.

Nota

Orice reguli pe care le veți plasa în fișierul .htaccess pot fi plasate și direct în fișierele de configurare a serverului. De fapt, documentația oficială Apache recomandă utilizarea fișierelor de configurare a serverului, mai degrabă decât .htaccess, deoarece Apache le procesează mai rapid.

Cu toate acestea, în aceasta exemplu simplu, creșterea performanței va fi neglijabilă. Mai mult, setarea regulilor .htaccess este convenabilă, mai ales cu mai multe site-uri web pe același server. Nu necesită o repornire a serverului pentru ca modificările să intre în vigoare și nu necesită privilegii de superutilizator pentru a edita aceste reguli, făcând posibile întreținerea și modificările din conturi neprivilegiate. Unele programe open source populare cod sursă, cum ar fi Joomla, se bazează adesea pe fișierul .htaccess în software pentru a modifica și a crea reguli suplimentare după cum este necesar.

Va trebui să instalăm și să securizăm încă câteva setări înainte de a începe.

În mod implicit, Apache nu permite utilizarea fișierului .htaccess pentru a impune regulile de rescriere, așa că trebuie să permiteți mai întâi modificări ale fișierului. Deschideți fișierul de configurare implicit în Apache folosind nano sau editorul de text preferat.

Sudo nano /etc/apache2/sites-available/000-default.conf

În interiorul acestui fișier veți găsi un bloc , începând de la prima linie. În interiorul acestui bloc, adăugați următoarele bloc nou astfel încât fișierul dvs. de configurare să arate așa. Asigurați-vă că toate blocurile sunt indentate corect.

/etc/apache2/sites-available/000-default.conf

Opțiuni Indexuri FollowSymLinks MultiViews AllowOverride All Necesită toate acordate . . .

Salvați și închideți fișierul. Reporniți Apache pentru ca modificările să intre în vigoare.

Sudo systemctl reporniți apache2

Acum creați un fișier .htaccess în directorul rădăcină web.

Adăugați această linie în partea de sus a noului fișier pentru a activa suprascrierea.

/var/www/html/.htaccess

RewriteEngine activat

Salvați fișierul și ieșiți.

Acum aveți un fișier .htaccess operațional pe care îl puteți utiliza pentru a gestiona regulile de rutare ale aplicației dvs. web. În pasul următor, vom crea exemple de fișiere de site pe care le vom folosi pentru a demonstra regulile de rescriere.

Pasul 3 – Configurarea rescrierea adresei URL

Aici vom instala rescrierea de bază a adreselor URL, care convertește adresele URL în căi de cod reale. Mai exact, vom permite accesul utilizatorilor. http://your_server_ip/about

Să începem prin a crea un fișier numit about.html în directorul web rădăcină.

Sudo nano /var/www/html/about.html

Copiați următorul cod HTML într-un fișier, apoi salvați-l și închideți-l.

/var/www/html/about.html

Despre noi

Despre noi

Puteți accesa pagina http://your_server_ip/about.html, dar rețineți că dacă încercați să accesați http://your_server_ip/about veți vedea o eroare 404 Nu a fost găsit . Dar pentru ca utilizatorii să acceseze pagina folosind despre în loc să rescrie regulile, această funcționalitate va permite.

RewriteRules urmează următorul format:

Structura generală a lui RewriteRule

Înlocuirea modelului RewriteRule

  • RewriteRule definește o directivă.
  • modelul este o expresie regulată care se potrivește cu șirul dorit de la adresa URL pe care o vizualizează browserul.
  • substituția este calea către URL-ul real, adică calea servere de fișiere Apache.
  • steagurile sunt parametri opționali care pot fi modificați pentru a determina cum funcționează regula.

Deschideți fișierul .htaccess.

Sudo nano /var/www/html/.htaccess

După prima linie, adăugați un RewriteRule marcat cu roșu și salvați fișierul.

/var/www/html/.htaccess

RewriteEngine on RewriteRule ^about$ about.html

În acest caz, ^about$ este șablonul, about.html este înlocuitorul și este steag. Exemplul nostru folosește mai multe caractere cu sens special:

  • ^ indică începutul adresei URL, după ip_server_dvs / .
  • $ indică sfârșitul adresei URL.
  • despre se potrivește cu șirul „despre”.
  • about.html este fișierul real care este accesat de utilizator.
  • este un steag care face ca regula să nu țină seama de majuscule și minuscule.

Acum, ar trebui să puteți accesa http://your_server_ip/about în browser. De fapt, cu regula prezentată mai sus, următoarele adrese URL ar indica about.html:

  • http://your_server_ip /about , din cauza definiției regulii.
  • http://your_server_ip /Despre , Deoarece regula nu face distincție între majuscule și minuscule.
  • http://your_server_ip/about.html deoarece numele de fișier original corect va funcționa întotdeauna.

Mai jos nu vor fi:

  • http://your_server_ip /about/ deoarece regula este clar spusă că nu poate exista nimic după folosirea simbolului $.
  • http://your_server_ip /contact deoarece nu se va potrivi cu linia about din regulă.

Acum aveți un fișier .htaccess live cu regula simpla, vă puteți modifica și extinde în funcție de nevoile dvs. În secțiunile următoare vom arăta două exemple suplimentare ale celor mai frecvent utilizate directive.

Exemplul 1 – Simplificarea șirului de interogări cu RewriteRule

Aplicațiile web sunt adesea folosite șiruri de interogare, care sunt atașate la o adresă URL folosind un semn de întrebare (?) după adresă. Parametrii individuali sunt separați printr-un ampersand (&). Șirurile de interogare pot fi folosite pentru a transmite date suplimentare între paginile individuale ale aplicației.

De exemplu, paginile cu rezultatele căutării scrise în PHP pot folosi o adresă URL precum http://example.ru/results.php?item=shirt&author=andreyex. În acest exemplu sunt două parametri suplimentari treceți un script de aplicație imaginar rezultat.php: articol cu ​​cămașa de valoare și autorul cu valoarea andreyex . Aplicația poate folosi informațiile șirului de interogare pentru a construi pagina corectă pentru vizitator.

Regulile de rescriere Apache sunt adesea folosite pentru a simplifica astfel de legături lungi și inestetice ca mai sus în URL-uri prietenoase, care sunt mai ușor de introdus și interpretat vizual. În acest exemplu, am dori să simplificăm linkul de mai sus pentru a face http://example.ru/shirt/andreyex. cămașă și valorile parametrilor autor și andreyex la adresa anterioară, dar fără șirul de interogare și numele scriptului.

Iată o regulă pentru a implementa asta:

Exemplu simplu

RewriteRule ^shirt/andreyex$ results.php?item=shirt&author=andreyex

shirt/andreyex se potrivește în mod explicit în adresa solicitată și Apache este instruit să ruleze results.php?item=shirt&author=andreyex.

steagurile sunt de obicei folosite în regulile de rescriere. Ei îi spun lui Apache să atașeze orice șir de interogare suplimentar la adresa URL difuzată. Fără aceasta, linia de interogare suplimentară va fi eliminată. http://example.ru/shirt/andreyex?page=2 results.php?item=shirt&author=andreyex&page=2

Deși această metodă obține efectul dorit, atât numele elementului, cât și autorul sunt codificate în reguli. Aceasta înseamnă că regula nu va funcționa pentru niciun alt obiect, cum ar fi pantaloni, sau autor, cum ar fi distrugătorul.

Pentru a face regula mai generală, putem folosi expresii regulate pentru a se potrivi cu o parte din adresa sursă și să folosim acele părți în modelul de substituție. Regula modificată ar arăta astfel:

Exemplu simplu

RewriteRule ^(+)/(andreyex|distrugător|toamnă|primăvară) results.php?item=$1&author=$2

Prima expresie regulată din paranteză se potrivește cu un șir care conține caractere alfanumerice și numere, cum ar fi cămașă sau pantaloni, și stochează porțiunea potrivită ca variabilă $1 . Al doilea grup de expresii din paranteze se potrivește exact cu andreyex, distrugător, toamnă sau primăvară și stochează, de asemenea, fragmentul potrivit ca $2.

Fragmentele potrivite sunt apoi plasate în URL-ul rezultat în variabilele articol și autor în loc de cămașa și andreyex-ul codificati pe care le-am folosit înainte.

Cele de mai sus vor converti, de exemplu, http://example.ru/pants/andreyex în http://example.ru/results.php?item=pants&author=andreyex . Acest exemplu este și pentru viitor, permițând mai multe elemente și autor să fie rescrise corect folosind o singură regulă.

Exemplul 2 - Adăugarea unei condiții cu logică folosind RewriteConds

Regulile de rescriere nu sunt neapărat întotdeauna evaluate una după alta, fără restricții. Directiva RewriteCond ne permite să adăugăm condiții regulilor noastre de rescriere pentru a controla când sunt procesate regulile. RewriteConds urmează următorul format:

Structura generală a lui RewriteCond

RewriteCond TestString Condiție

  • RewriteCond definește directiva RewriteCond.
  • TestString este șirul care este testat.
  • Condiția este un model sau o condiție care se potrivește.
  • Flag-urile sunt parametri opționali care pot schimba starea și regulile de evaluare.

Dacă RewriteCond este adevărată, atunci RewriteRule va fi luată în considerare imediat după. Dacă nu este cazul, atunci regula va fi eliminată. RewriteConds multiple pot fi folosite unul după altul, iar cu comportamentul implicit, toate trebuie evaluate, adevărate și în următoarea regulă de luat în considerare.

De exemplu, să presupunem că doriți să redirecționați toate solicitările de fișiere și directoare inexistente de pe site-ul dvs. înapoi către pagina de startîn loc să afișeze pagina de eroare standard 404 Nu a fost găsit. Acest lucru se poate realiza cu următoarele condiții de regulă:

Redirecționează toate solicitările de fișiere și directoare inexistente către pagina principală

RewriteCond %(REQUEST_FILENAME) !-f RewriteCond %(REQUEST_FILENAME) !-d RewriteRule . /

Ținând cont de cele de mai sus:

  • %(REQUEST_FILENAME) este șirul de verificat. În acest caz, numele fișierului solicitat, care este o variabilă de sistem disponibilă pentru fiecare cerere.
  • -f este o condiție încorporată care verifică dacă numele solicitat există pe disc și este un fișier. ! - Este operatorul de negație. Când este combinat, !-f evaluează ca adevărat numai dacă numele specificat nu există sau nu este un fișier.
  • De asemenea, !-d evaluează ca adevărat numai dacă numele specificat nu există sau nu este un director.

RewriteRule de pe ultima linie va avea efect numai pentru cererile de fișiere și directoare inexistente. RewriteRule în sine este foarte simplu și redirecționează fiecare solicitare către / rădăcina site-ului.

Concluzie

mod_rewrite este un modul Apache util care poate fi folosit eficient pentru a furniza URL-uri care pot fi citite de om. În această lecție, ați învățat cum să utilizați directiva RewriteRule pentru a redirecționa adresele URL, inclusiv dintr-un șir de interogare. Ați învățat și despre redirecționarea URL folosind directiva RewriteCond.

Uneori, oamenii se confruntă cu o problemă - serverul apache nu citește fișierul dvs. .htaccess sau apache nu rescrie adresa URL și folosim regulile corecte de rescriere în fișierele de configurare. Acest lucru se întâmplă deoarece modulul de rescriere nu este inclus în apache. Deoarece modulul mod_rewrite nu este activat implicit pe server, deci pentru a utiliza rescrierea, trebuie să activați manual mode_rewrite. În articolul meu „Activați modulul mod_rewrite pentru Apache în Debian/Ubuntu”, vă voi spune cum pot face acest lucru.

1. Activarea modulului mod_rewrite în Apache2

Pentru a face acest lucru, folosesc comanda „a2enmod” pentru a activa orice module în Server web Apache 2. Deci, utilizați următoarea comandă pentru a activa modulul mod_rewrite pentru apache:

$ sudo a2enmod rescrie

2. Activați ReWrite în gazda virtuală

După activarea modulului ReWrite pentru Apache, trebuie să adăugați „AllowOverride All” în fișierul de configurare pentru gazda virtuală. Această setare poate fi activată și la nivel global prin editarea fișierului principal de configurare apache:

Opțiuni Indexuri FollowSymLinks AllowOverride All

3. Reporniți configurația Apache2

După activarea modulului mod_rewrite pentru Apache, trebuie să reporniți serverul Apache2:

# service apache2 reporniți

Subiectul „Activați modulul mod_rewrite pentru Apache pe Debian/Ubuntu” este acum complet.

Acest modul al serverului web Apache este conceput pentru a converti adresele URL sursă. 12/ în schimb 31/theme.html Acest mecanism este folosit foarte des pe site-urile de știri. În același timp, este un plus pentru securitate. Utilizatorii nu văd ce fișier (script) este de fapt accesat.

Să ne uităm la câteva întrebări de mai jos:
1. Cum se activează mod_rewrite pe Apache?
2. Puțină teorie. Cum funcționează mod_rewrite.
3. Un exemplu simplu.
4. Ce ar trebui făcut în scenariu?
5. Ce dă această abordareși mod_rewrite în general?
6. Posibile erori.
7. Alma Mater pentru studiul mod_rewrite

1. Cum se activează mod_rewrite pe Apache?

Pentru a activa mod_rewrite pe serverul web Apache, trebuie să editați fișierul httpd.conf.
Pentru a face acest lucru, deschideți fișierul httpd.conf și căutați linia:

Cod
#LoadModule rewrite_module modules/mod_rewrite.so

Și eliminați comentariul

Cod
LoadModule rewrite_module modules/mod_rewrite.so

Apoi repornim serverul web.

2. Puțină teorie. Cum funcționează mod_rewrite.

De regulă, programatorii care tocmai au întâlnit mod_rewrite nu înțeleg pe deplin cum funcționează acest mecanism. Din acest motiv pentru o lungă perioadă de timp nedumerit cu „greșelile copilăriei.

Aşa. După cum știm, există o așa-numită cerere GET, adică http://example.com/2005/12/31/theme.html, care „vine” la serverul web (în exemplul nostru - Apache). Ce face serverul? În primul rând, se uită la setările acestei gazde. După care el decide ce să facă în continuare. Fie trimiteți înapoi conținutul paginii principale către utilizator (index.html, de exemplu), fie trimiteți codul scriptului principal index.php pentru interpretare sau returnați o eroare 404 etc. etc. Să presupunem că vom continua să lucrăm cu index.phtml. Probabil că știți deja ce se va întâmpla în continuare. Ne vom concentra asupra momentului în care serverul se uită la setările gazdei. Pot fi un număr mare de ele. Dar fără greșeală, serverul încearcă să găsească fișierul .htaccess în rădăcină. (Fișierul de configurare Apache din mers). În acest fișier se află regulile de conversie mod_rewrite (pot fi localizate și în httpd.conf). Aceste. Duc la faptul că conversia URL este efectuată ÎNAINTE ca scripturile să funcționeze.

Algoritmul este următorul:
1. Serverul primește o solicitare GET: http://example.com/2005/12/31/theme.html
2. Găsește reguli de conversie mod_rewrite în .htaccess.
3. Transformă.
4. Redirecționează către index.phtml conform regulilor de conversie.
5. Scriptul începe să funcționeze.

3. Un exemplu simplu.

Mulți dintre voi ați văzut acest lucru: http://example.com/2005/12/31/theme.html. Astfel de adrese sunt adesea folosite de site-urile de știri. Desigur, nu au toate aceste foldere și fișiere html. Toate datele sunt procesate de script. Mai jos vom analiza una dintre opțiunile pentru o astfel de transformare. Îți spun imediat. Există o mulțime de opțiuni, iau doar un caz particular, pe care îl folosesc și îl consider cel mai universal.

Cod
RewriteEngine activat
Opțiuni +FollowSymlinks
RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^(.*)$ index.phtml

Să privim totul în ordine.
Două RewriteConds la rând sunt condiții între care există un AND.
Aceste. Dacă adresa solicitată nu este reală fișier existent sau transferați directorul în index.phtml. Aceste. Astfel, am implementat ca cererile noastre http://example.com/2005/12/31/theme.html să fie procesate de scriptul index.phtml. Acum întreaga întrebare este cum aflăm în scriptul pe care utilizatorul îl solicită /2005/12/31/theme.html.

Există aici o abatere lirică. Câteva cuvinte despre RewrtiterRule. Directiva ia în considerare parametrul. Prima (în cazul nostru: ^(.*)$) este un șir de expresii regulate care verifică dacă adresa solicitată (în cazul nostru: /2005/12/31/theme.html) satisface modelul (în cazul nostru da , adică k. Modelul spune: „orice caracter de 0 sau de mai multe ori” de la începutul până la sfârșitul liniei - ^(.*)$). Dacă modelul este satisfăcut, mod_rewrite redirecționează cererea către fișierul specificat în al doilea parametru (în cazul nostru: index.phtml).

Acum întreaga întrebare este cum știe scriptul despre „/2005/12/31/theme.html”. Există două opțiuni.
Primul:

Cod
RewriteRule ^(.*)$ index.phtml?$1 [L]

Unde „/2005/12/31/theme.html” va fi transmis scriptului index.phtml în variabila QUERY_STRING, deoarece $1 este prima paranteză din model, care ar fi echivalent cu: http://example.com/?/2005/12/31/theme.html. Dar ai văzut asta undeva? Nu. Prin urmare, folosim QSA ca cheie.

Există o variabilă de server (la care scripturile au acces) REQUEST_URI care conține întotdeauna o cerere GET (“/2005/12/31/theme.html”). Deci, dacă redirecționăm către index.phtml, atunci REQUEST_URI ar trebui să primească valoarea index.phtml DAR cheia QSA o înlocuiește cu „/2005/12/31/theme.html”. Aceste. redirecționăm fizic către index.phtml și arătăm logic scriptul pe care l-a accesat utilizatorul „/2005/12/31/theme.html”.

4. Realizarea unui scenariu

Acum lucrăm deja cu index.phtml, scriptul către care am redirecționat. Vă spun imediat, codul este în PHP, pentru că... Nu vorbesc bine alte limbi web.

Este atât de simplu. Acum puteți opera cu această matrice. Ca să fie și mai clar. Să vă fac o analogie. Să presupunem această adresă: http://example.com/index.phtml?year=2005&m...y=31&news=theme . După cum știm, în script acești parametri vor fi disponibili prin matricea $_GET.
deci, $_GET['an'] este același cu $arr, $_GET['lună'] este același cu $arr, $_GET['ziua'] este același cu $arr, $_GET ['temă' ] este același cu $arr (trebuie doar să tăiați „.html”).

5. Ce oferă această abordare și mod_rewrite în general?

În primul rând pentru motoarele de căutare o adresă URL ca: http://example.com/?/2005/12/31/theme.html este mult mai plăcută decât http://example.com/index.phtml?year=2005&m...y=31&news=theme , iar pentru utilizatori, de asemenea, trebuie să fiți de acord.

Al doilea punct. Cu mod_rewrite, posibilitatea unui atac XSS este redusă la aproape nimic, deoarece Bug-ul include este practic acoperit. Acest lucru nu este atât de vizibil în acest exemplu, dar credeți-mă pe cuvânt, așa este. DAR in orice caz totul depinde de capul tau!!!

Al treilea punct este ascunderea tehnologiei utilizate efectiv. Acest lucru face parțial mai dificilă piratarea site-ului, dar aceasta este doar limita superioară, ca noroiul pe un iaz stagnant.

6. Posibile erori

De obicei pot apărea următoarele erori:

404 – document nu a fost găsit. Cauză: RewriteRules nu sunt declanșate.
403 – Interzis – accesul este interzis. Regulile de rescriere conțin o eroare logică, care apare din cauza unei încercări de redirecționare către un fișier în care nu există acces (/index.php - va da exact acest lucru, deoarece / în sisteme UNIXînseamnă calea din directorul rădăcină al SERVERULUI, unde în mod natural nu veți avea acces).
500 – Eroare interna a serverului. Motivul este o eroare de sintaxă în fișierul .htaccess.

7. Alma Mater pentru studiul mod_rewrite

Personal, acest articol m-a ajutat foarte mult. Iată rezumatul ei, iar mai jos atașez un fișier ZIP. Conține acest articol în format RTF,

Citat
„Principalul beneficiu pe care ți-l oferă mod_rewrite este configurabilitatea și flexibilitatea inerente Sendmail. Partea inversă mod_rewrite aduce configurabilitatea și flexibilitatea native pentru Sendmail.”

Brian Behlendorf

Apache Group
„În ciuda multor exemple și documentație, mod_rewrite este Voodoo. Voodoo al naibii de cool, dar tot Voodoo.”

Brian Moore
[email protected]

Bun venit în lumea mod_rewrite, cuțit elvețian Conversii URL!
Acest modul folosește un motor bazat pe reguli (parser bazat pe expresii regulate) pentru a efectua transformări URL din mers. Acceptă un număr nelimitat de reguli și un număr nelimitat de condiții legate de reguli pentru a implementa un mecanism cu adevărat flexibil și puternic pentru transformările URL. Adresele URL de rezoluție pot depinde de diferite criterii, cum ar fi variabilele serverului, variabile de mediu, anteturile HTTP, orele și chiar solicitările către baze de date externe în diferite formate pot fi folosite pentru a obține conversii URL cu adevărat precise, care corespund așteptărilor dvs.

Acest modul operează pe adrese URL complete (inclusiv calea informațiilor) atât în ​​contextul serverului (httpd.conf) cât și în contextul directorului (.htaccess) și poate genera chiar și părți din șirul de interogări ca rezultat. Rezultatul convertit poate duce la procesarea internă, redirecționarea cererii externe sau chiar trecerea printr-un modul proxy intern.

Cu toate acestea, toată această funcționalitate și flexibilitate vine cu un dezavantaj: complexitatea. Deci, nu vă așteptați să înțelegeți întregul modul într-o singură zi.
Acest modul a fost conceput și scris în aprilie 1996 și donat exclusiv grupului Apache în iulie 1997

Ralf S. Engelschall
[email protected]
www.engelschall.com

Important:

    Suport pentru fișiere „.htaccess” Disponibil numai pe Linux hosting. Pe Windows găzduiește funcția „.htaccess” execută fișierul web.config.

    Modul de suport „.htaccess” disponibil pentru toate planurile de găzduire partajată bazate pe sistemul de operare Linux. Dacă primiți un mesaj despre lipsa suportului la instalarea CMS „.htaccess” doar ignora-l.

Nu am un fișier .htaccess, ce ar trebui să fac?

Dacă configurați un server web Apache, dar nu aveți un fișier .htaccess, creează-l și notează directivele necesare.

Pentru a crea .htaccess, conectați-vă la panoul de control al găzduirii conform instrucțiunilor: Localizați fișierul .htaccessîn directorul site-ului folosind articolul: .

Dacă ați șters accidental un fișier .htaccess, restaurați-l. Sau adaugă fișier standard .htaccess pentru CMS-ul dvs.:

Fișierul .htaccess nu este vizibil în cPanel

Pentru a vedea fișiere ascunse(începând cu un punct) în cPanel, trebuie să faceți următoarele:

Cum se activează rescrierea modului?

Modul "mod_rewrite" prezent la toate planuri tarifare Gazduire Linux. Pentru a activa "mod_rewrite" adăugați la fișier .htaccessșir de vizualizare.

© 2024 ermake.ru -- Despre repararea PC-ului - Portal de informații