Curs Php-mysql

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
Care tag creaza un text ingrosat?
<q> <strong> <em>
<p>Adresa: <strong>http://CoursesWeb.net/</strong> - Tutoriale.</p>
Care din aceste coduri CSS afiseaza textul ingrosat?
text-size: 18px; font-style: italic; font-weight: 800;
#id {
  font-weight: 800;
}
Ce functie JavaScript apeleaza o alta functie, in mod repetat, la un anumit interval de timp?
setInterval() setTimeout() push()
function someFunction() { alert("CoursesWeb.net"); }
setInterval("someFunction()", 2000);
Clic pe variabila definita corect in PHP.
var vname = 8; $vname = 8; $vname == 8;
$vname = 8;
echo $vname;
Care din urmatoarele forme ale verbului "travel" (a calatori) e la timpul Prezent Perfect?
have traveled shall travel had traveled
We have traveled in space.
- Noi am calatorit (deja) in spatiu.
Care din urmatoarele forme ale verbului "pintar" (a picta) se foloseste la Trecutul Imperfect?
ir a pintar pintaba pintó
La niña pintaba un arco iris.
- Fetita picta un curcubeu.
Utilizare mod-rewrite

Last accessed pages

  1. Trecut nedefinit 4 (309)
  2. Expresii cu Tener (2115)
  3. Expresii pentru vreme (2554)
  4. Gramatica limbii spaniole. Indrumator si prezentare generala (67526)
  5. Comparative si superlative (3622)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (1062)
  2. Gramatica limbii engleze - Prezentare Generala (664)
  3. Exercitii engleza - English Tests and exercises - Grammar (606)
  4. Prezentul simplu si continuu - Present Tense Simple and Continuous (476)
  5. Coduri pt culori (404)