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 defineste zona de click intr-o harta creata dintr-o imagine?
<map> <img> <area>
<img src="image.jpg" usemap="#map1">
<map name="map1">
  <area shape="rect" coords="9, 120, 56, 149" href="#">
  <area shape="rect" coords="100, 200, 156, 249" href="#">
</map>
Ce proprietate CSS indica ce sa se intample cand continutul unui element depaseste dimensiunile lui?
display overflow position
#id {
  overflow: auto;
}
Clic pe evenimentul care este declansat cand mouse-ul e deasupra unui obiect.
onclick onmouseover onmouseout
document.getElementById("id").onmouseover = function(){
  document.write("Sa ai Viata Buna");
}
Indicati variabila PHP ce contine datele adaugate in adresa URL, dupa caracterul "?".
$_SESSION $_GET $_POST
if(isset($_GET["id"])) {
  echo $_GET["id"];
}
Clic pe pronumele reflexiv care e potrivit in propozitia: "Marc is the boy ... won the prize".
who which whoever
Marc is the boy who won the prize.
- Marc e baiatul care a castigat premiul.
Clic pe pronumele reflexiv care e potrivit in propozitia: "Voy a ver al pintor de ... les hablé ayer".
que quien cuyo
Voy a ver al pintor de quien les hablé ayer.
- Ma duc sa vad pictorul despre care ti-am vorbit ieri.
Utilizare mod-rewrite

Last accessed pages

  1. Conditional IF - Exercitii si teste engleza incepatori (20117)
  2. Lectia 120, Recapitulareb 109-110 (42)
  3. Lectia 202, Recapitulare 182 (44)
  4. Questions from life - Spiritual answers (1647)
  5. PHP MySQL - Introducere si Tipuri de Date (3303)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (617)
  2. Conditional IF in Limba Engleza - Fraze Conditionale (532)
  3. Gramatica limbii engleze - Prezentare Generala (439)
  4. Exercitii engleza - English Tests and exercises - Grammar (379)
  5. Coduri pt culori (362)