1. Despre mod-rewrite

Mod-rewrite este un modul din Apache folosit la rescrierea adreselor URL, foarte util pentru imbunatatirea aspectului acestora, mai ales in cazul site-urilor construite cu php.
Dupa cum spune si numele "rewrite", acesta rescrie adresele URL, aspect care ajuta la o mai buna indexare a site-urilor in motoarele de cautare.
De exemplu avem o adresa url cu urmatoarea forma:

Care deschide o pagina cu jocul Sah.
Are un aspect destul e "incurcat" si greu de retinut, fapt luat in considerare si de motoarele de cautare, cum este Google.
Ar arata mult mai bine daca adresa ar fi : - Acum e mult mai bine si usor de retinut.
Cum site-ul nostru este astfel realizat incat trebuie folosita prima forma a adresei pt. a deschide pagina indicata, trebuie sa gasim o modalitate usoara care sa ne ajute la modificarea adresei, fara a afecta structura site-ului.
Acest lucru se poate face cu "mod-rewrite", folosind comenzi in fisierul ".htaccess". Cand din exterior este accesata adresa "marplo.net/joc-sah.html", acesta spune serverului Apache sa se duca la "marplo.net/index.php?id=joc&pg=sah".
In acest fel, mod-rewrite poate fi folosit si pentru securitate, ascunzand astfel calea reala catre paginile siteului.

2. Aplicarea mod-rewrite

Pentru a realiza aceasta modificare a adresei, specificam in ".htaccess" anumite reguli de rescriere.
Intai ne asiguram ca pachetul de hosting pe care-l folosim permite mod-rewrite (intrebati ofertandul pachetului) si pentru a fi siguri de reusita, scriem la inceputul fisierului ".htaccess" urmatorul cod:

Options +FollowSymLinks
RewriteEngine On
- Codul de mai sus activeaza existenta modului mod-rewrite.
- Avem nevoie de "+FollowSymLinks" pentru ca rescrierea sa functioneze. De cele mai multe ori este deja activa aceasta optiune.
- A doua optiune "RewriteEngine On" poate fi pornita si din fisierul "httpd.conf" in Apache, dar daca nu avem acces la acest fisier si ca sa fim mai siguri, adaugam comanda in "htaccess", aceasta ii spune serverului Apache sa incarce modulul "mod_rewrite" si sa porneasca interpretarea regulilor.

In continuare vom scrie comanda pentru schimbarea adresei, care spune serverului sa rescrie toate cererile de forma "CUVANT1-CUVANT2.html" in "index?id=CUVANT1&pg=CUVANT2".
Acest lucru se poate realiza in mai multe feluri:
    - se poate scrie fiecare adresa in parte (forma dorita pt. fiecare link si apoi forma folosita de server), lucru mai dificil de realizat cand avem multe pagini.
    - sau folosim un mod mai compact (o expresie regulata), care va recunoaste singur adresele de forma "CUVANT1-CUVANT2.html". Aceasta comanda ar putea avea urmatoarea forma: - Unde "RewriteRule" indica faptul ca este vorba despre o regula de rescriere.
- "^([a-zA-Z0-9]+)" este un sablon care recunoaste si spune modulului care este acel "CUVANT1", este o expresie regulata de tip POSIX. Daca nu ati mai folosit expresii regulate pana acum, cititi cu atentie explicatiile urmatoare ca sa intelegeti cum functioneaza acestea. A doua paranteza "([a-zA-Z0-9]+)" recunoaste si indica, in acelasi mod, care este acel CUVANT2, iar liniuta dintre cele 2 paranteze sablon (-) si ".html" va indica recunoasterea si rescrierea numai a adreselor de forma "CUVANT1-CUVANT2.html"
Deci, daca s-a gasit URL-ul sa corespunda acestui model, mod-rewrite va indica serverului sa transforme adresa in forma "index.php?id=$1&pg=$2", unde "$1" si "$2" sunt cuvintele recunoscute de primul si al doilea sablon. Acesta este rolul sablonului, de a recunoaste toate cuvintele care se incadreaza in formula acestuia si a le putea transfera celeilalte adrese (folosita apoi de scriptul site-ului), sub forma: '$1", "$2", in ordinea parantezelor. Deci serverul va transmite mai departe scriptului (paginii php) adresa "index.php?id=CUVANT1&pgCUVANT2".
Putem avea mai multe sabloane sau numai unul, in functie de forma de creare a adresei URL.
Directiva de la final ne spune ca sablonul nu va fi case sensitive (NC="No Case") si daca sablonul corespunde, aceasta va fi ultima regula (L=Last). Aici mai putem adauga si alte directive cum ar fi "R=301" (Redirect cu un cod de redirectare), "QSA" (Query String Append) etc. Gasiti mai multe dsetalii (in engleza) la pagina www.skullbox.info/manual/mod/mod_rewrite.html#RewriteRule
Fisierul .htaccess va arata astfel:
Options +FollowSymLinks
RewriteEngine On

# Incepe comanda pt. mod-rewrite

RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+).html$ index.php?id=$1&pg=$2 [NC,L]
- In exemplul nostru, in adresa "marplo.net/joc-sah.html", primul sablon va recunoaste cuvantul "joc" (deoarece se incadreaza in formula acestuia) iar al doilea va recunoaste cuvantul "sah".

Daca, de exemplu dorim ca adresa externa sa fie de forma: marplo.net/cuvant1/cuvant2.html, folosim in .htaccess comanda: RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+).html$ index.php?id=$1&pg=$2 [NC,L] (am inlocuit liniuta (-) dintre sabloane cu slash (/)).

Atentie! Cand folositi mod-rewrite, schimbati si forma adreselor din site-ul dv., dupa noua forma, la link-urile care deschid pagini ale site-ului.


Alt exemplu:
Daca de exemplu avem adresa URL originala de forma www.site.com/file.php?inf=cuvant_compus si dorim sa o rescriem sub forma www.site.com/cuvant_compus.html, folosim in .htaccess comanda de forma:

Am adaugat in interiorul parantezei, intre parantezele patrate, si liniuta de subliniere (_)
Daca "Cuvant-Compus" poate contine liniuta simpla, numere, litere mari si mici, scriem formula din sablon astfel:
Daca stiti sa lucrati cu aceste sabloane, e relativ simplu sa folositi mod-rewrite.
Trebuie stiut ca "mod_rewrite" nu se rezuma numai la asta. Puteti adauga multe alte conditii folosind "RewriteCond", conditii care tin de numele serverului, cookie etc., care se adreseaza mai mult celor avansati in acest domeniu. Pentru inceput e bine sa cunoasteti cele prezentate in acest capitol.

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Ce tip de <input> creaza o paleta de culori pentru selectare culoare?
type="text" type="color" type="date"
<input type="color" name="get_color" />
Care metoda CSS roteste elementul HTML la un anumit numar de grade?
scale() translate() rotate()
#some_id:hover {
  transform: rotate(60deg);
  -ms-transform: rotate(60deg);    /* IE 9 */
  -moz-transform: rotate(60deg);   /* Firefox */
}
Click pe functia care returneaza numarul cel mai mare.
pow() min() max()
var maxn = Math.max(8, 4, 88, 56);
alert(maxn);      // 88
Ce functie previne ca un fisier sa fie inclus mai mult de o data intr-o pagina?
include() include_once() require()
include_once("un_fisier.php");
Care este traducerea corecta pentru: "Ahead of time"?
Peste timp La timp Inainte de vreme
Most people arrived ahead of time.
- Cei mai multi oameni au sosit inainte de vreme (prea devreme).
Indicati traducerea corecta a cuvantului "buenĂ­simo"
mai bun mai putin bun extrem de bun
Este fruto es buenĂ­simo.
- Acest fruct este extrem /nemaipomenit de bun.
Utilizare mod-rewrite

Last accessed pages

  1. Sufixele -ful, -less si -ness - ful, less and ness suffixes (6612)
  2. Curs PHP MySQL, Tutoriale si Scripturi PHP (14202)
  3. Viitor simplu si continuu - Future Tense Simple and Continuous (22636)
  4. Curs si Tutoriale JavaScript (15184)
  5. Conditional IF - Exercitii si teste engleza incepatori (7829)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (2215)
  2. Curs HTML gratuit Tutoriale HTML5 (1594)
  3. Curs si Tutoriale JavaScript (1571)
  4. Curs PHP MySQL, Tutoriale si Scripturi PHP (1525)
  5. Curs CSS Online Tutoriale CSS3 (1401)