Skilled Gaming

Design/Web/Programming/IT => HTML => Developing => Tutoriale/Tutorials => Topic started by: CrystalMD on 14 May 2015, 18:39:08

Title: [TUT]URL Rewriting + Bonus
Post by: CrystalMD on 14 May 2015, 18:39:08
Ce este URL Rewriting?

Cele mai multe site-uri dinamice includ variabile in adresele URL, care spun site-ul ce informații sa arate utilizatorului. De obicei, acest lucru ofera URL-uri cum ar fi urmatoru, spunind scriptului relevant de pe site sa incarce produsul cu numarul 7.

Code: [Select]
http://www.asite.com/products.php?product_id=7
Problema cu acest tip de structura URL este ca URL-ul nu este deloc memorabil. Este greu pentru a citi prin telefon. Motoarele de cautare și utilizatorii nu primesc nici o informatie utila de la acel URL. Este un URL destul de standard - un fel de sortare in mod implicit la majoritatea CMS-uri. Sa-l comparam cu acest URL:

Code: [Select]
http://www.asite.com/products/7/
In mod clar URL-ul este mult mai curat și mai scurt. Este mult mai usor sa-l tineti minte, si mult mai usor sa-l cititi. Insa URL-ul nu ne ofera o informatie mai detaliata despre produs. Dar putem face mai mult:

Code: [Select]
http://www.asite.com/dogs/huskey/
Acum stim cu exactitate care e produsul :)

Basic URL Rewriting

Ca sa intelegem mai bine sa luam un exemplu cum ar fi http://www.pets.com/pet_care_info_07_07_2008.php si dorim sa-l facem in http://www.pets.com/pet-care/
Pentru a efectua aceasta 'conversie' avem nevoie de un fisier numit .htaccess (nu .htaccess.txt sau settings.htaccess).
Fisierul .htaccess este un file de configuratii pentru server. Daca se va gasi vre-o eroare in fisier ar trebui sa primiti error de tip "500".

Code: [Select]
RewriteEngine On    # Pornim masina de rewriting
RewriteRule    ^pet-care/?$    pet_care_info_01_02_2015.php    [NC,L]    # Tratam solicitarile pentru "pet-care"

Linia cu RewriteRule face toata treaba astfel :


Dar! Daca avem nevoie de produse si id-urile lor atunci avem:
http://www.site.com/show_a_product.php?product_id=7 - Original
http://www.site.com/products/7/ - cum dorim sa arate

Code: [Select]
RewriteRule    ^products/([0-9]+)/?$    show_a_product.php?product_id=$1    [NC,L]
Si dupa cum vedeti la "Model" am pus [0-9]+ unde 0-9 reprezinta toate numele posibile sa fie prezente(toate numerele) iar acel + inseamna ca pot fi id-u poate fi format din mai multe numere (gen: 59). Iar la product_id=$1 am folosit ca sa potrivim numarul cu cel din "Model", iar daca avem mai multe numere in Model vom folosi si $2 $3 si asa mai departe :)


Insa din nou, DAR daca dorim sa rescriem URL-ul, dar sa folosim alta extensie, vom scrie tot asa sau altfel? Pai e putin altfel :)
Singuru lucru care trebuie sa-l facem este sa adaugam un Slash (bara oblica). Sa luam exmplu file-u rss, din php sa-l schimbam in xml, iar codu ar trebui sa fie:

Code: [Select]
RewriteRule    ^rss\.xml$    rss.php    [NC,L]    # Schimbam URL-ul feed

Si inca odata DAR!!!! Daca id-ul reprezinta litere nu numere cum facem? Pai simplu, oferim in "Model" un 'array' de la 'A' la 'Z' si desigur de la 'a' la 'z', vom folosi [A-Za-z-], iar codul ar fi:

Code: [Select]
RewriteRule    ^dogs/([A-Za-z0-9-]+)/?$    get_product_by_name.php?product_name=$1    [NC,L] [A-Za-z0-9-]+ ar inseamna ca se folosesc toate literele si numerele :)


Dar daca dorim sa scriem mai multe 'Reguli' vom folosi:
Code: [Select]
RewriteRule    ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$    get_product_by_name.php?category_name=$1&product_name=$2    [NC,L]    # Products
RewriteRule    ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$    get_blog_post_by_title.php?category_name=$1&post_title=$2    [NC,L]    # Blog Posts
Si va iesi cam asa /categorie/titlu.


Asta cam a fost esentialul pana acum :) Trecem la urmatoarea etapa :D

Mutarea continutului

Code: [Select]
RewriteRule    ^article/?$    http://www.new-domain.com/article/    [R,NC,L]    # Mutare temporara
Adaugarea lui "R" la "Flaguri" schimba Rewrite Rule-ul. Astfel Apache va transmite un mesaj la browser (HTTP Header) caci documentul s-a mutat temporar la URL dat in "Schimbare". Daca dorim sa afiseze caci documentul s-a mutat permanent pe un anume URL vom folosi "R=301" si va iesi cam:
Code: [Select]
RewriteRule    ^article/?$    http://www.new-domain.com/article/    [R=301,NC,L]

BONUS!! Variabilele serverului
HTTP Headers
Variabile de conexiune
Variabilele serverului
Data si timp
Special
Title: Re: [TUT]URL Rewriting + Bonus
Post by: s l a m on 14 May 2015, 18:42:21
Tutorial bun si folositor :)
Bravo
Title: Re: [TUT]URL Rewriting + Bonus
Post by: IstuntmanI on 14 May 2015, 19:10:15
Foarte foarte tare tutorialul, bravo !
Title: Re: [TUT]URL Rewriting + Bonus
Post by: CrystalMD on 14 May 2015, 19:14:41
Aha atunci e bine dar ca mi-am irosit 2 ore scriindu-l :))  :herpderp:
Title: Re: [TUT]URL Rewriting + Bonus
Post by: [SG]StaRLighT on 14 May 2015, 19:35:58
Bun tutorialul.
Title: Re: [TUT]URL Rewriting + Bonus
Post by: Aspects on 14 May 2015, 19:37:27
TuTs force ! :d
SimplePortal 2.3.7 © 2008-2026, SimplePortal