Author Topic:  [TUT]URL Rewriting + Bonus  (Read 1566 times)

0 Members and 1 Guest are viewing this topic.

Offline CrystalMD

  • Senior
  • *
  • Posts: 460
  • Reputation: 3
  • Gender: Male
  • Pățăști.
  • Real Name: George
  • Steam ID: CrystalMD
[TUT]URL Rewriting + Bonus
« 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 :
  • RewriteRule - Spune serverului ca se refera doar la un singur RewriteRule.
  • ^/pet-care/?$ - "Modelul". Serverul va verifica URL-ul de fiecare cerere al site-ului pentru a vedea daca acest model se potriveste. Dacă da, atunci Apache va schimba URL-ul cererii din sectiunea "Schimbare", care urmeaza.
  • pet_care_info_01_02_2003.php - "Schimbarea". In cazul în care modelul de mai sus se potriveste cererii, Apache utilizeaza această adresa URL în loc de URL-ul solicitat.
  • [NC,L] - "Steaguri", care spun Apache cum sa aplice regula. In acest caz, vom folosind doua steaguri. "NC", spune Apache ca această regula ar trebui sa fie de 'caz insensibil', si "L" spune Apache sa nu mai proceseze mai multe reguli, asta este ultima(de la Last).
  • # Tratam solicitarile pentru "pet-care" - Comentariu


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
  • HTTP_USER_AGENT
  • HTTP_REFERER
  • HTTP_COOKIE
  • HTTP_FORWARDED
  • HTTP_HOST
  • HTTP_PROXY_CONNECTION
  • HTTP_ACCEPT
Variabile de conexiune
  • REMOTE_ADDR
  • REMOTE_HOST
  • REMOTE_USER
  • REMOTE_IDENT
  • REQUEST_METHOD
  • SCRIPT_FILENAME
  • PATH_INFO
  • QUERY_STRING
  • AUTH_TYPE
Variabilele serverului
  • DOCUMENT_ROOT
  • SERVER_ADMIN
  • SERVER_NAME
  • SERVER_ADDR
  • SERVER_PORT
  • SERVER_PROTOCOL
  • SERVER_SOFTWARE
Data si timp
  • TIME_YEAR
  • TIME_MON
  • TIME_DAY
  • TIME_HOUR
  • TIME_MIN
  • TIME_SEC
  • TIME_WDAY
  • TIME
Special
  • API_VERSION
  • THE_REQUEST
  • REQUEST_URI
  • REQUEST_FILENAME
  • IS_SUBREQ



Follow me on Tumblr!

Offline s l a m

  • T I T A N I U M
  • Legend
  • God
  • *
  • Posts: 8920
  • Reputation: 27
  • Gender: Male
  • T I T A N I U M
  • Steam ID: slamsg
Re: [TUT]URL Rewriting + Bonus
« Reply #1 on: 14 May 2015, 18:42:21 »
Tutorial bun si folositor :)
Bravo

· ,.-~*’¨¯¨’*·~-.¸-(_S L A M_)-,.-~*’¨¯¨’*·~-.¸

Legends never die





http://slam-official.tumblr.com/
http://www.youtube.com/user/DeepWyNN


FH3 - FH4 - FH5 player




· ,.-~*’¨¯¨’*·~-.¸-(_S L A M_)-,.-~*’¨¯¨’*·~-.¸


Offline IstuntmanI

  • GZS Owner
  • Administrator
  • Cyborg
  • *
  • Posts: 15119
  • Reputation: 80
  • Gender: Male
  • Real Name: NcF http://fb.me/cnistor96
  • Steam ID: istuntmani
Re: [TUT]URL Rewriting + Bonus
« Reply #2 on: 14 May 2015, 19:10:15 »
Foarte foarte tare tutorialul, bravo !

Offline CrystalMD

  • Senior
  • *
  • Posts: 460
  • Reputation: 3
  • Gender: Male
  • Pățăști.
  • Real Name: George
  • Steam ID: CrystalMD
Re: [TUT]URL Rewriting + Bonus
« Reply #3 on: 14 May 2015, 19:14:41 »
Aha atunci e bine dar ca mi-am irosit 2 ore scriindu-l :))  :herpderp:



Follow me on Tumblr!

Offline [SG]StaRLighT

  • Hero Member
  • *
  • Posts: 524
  • Reputation: 0
  • Gender: Male
  • idk
  • Real Name: Andrei
  • Steam ID: nu stiu
Re: [TUT]URL Rewriting + Bonus
« Reply #4 on: 14 May 2015, 19:35:58 »
Bun tutorialul.

Offline Aspects

  • Junior
  • *
  • Posts: 74
  • Reputation: 0
  • Gender: Male
  • Mare om, prost la mate.
  • Real Name: Cosmin
  • Steam ID: Aspects
Re: [TUT]URL Rewriting + Bonus
« Reply #5 on: 14 May 2015, 19:37:27 »
TuTs force ! :d

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal