HackerIT
Welcome To Paradise !
Lista Forumurilor Pe Tematici
HackerIT | Reguli | Inregistrare | Login

POZE HACKERIT

Nu sunteti logat.
Nou pe simpatie:
Ank_beleaua Profile
Femeie
25 ani
Bucuresti
cauta Barbat
35 - 51 ani
HackerIT / Haxori / [tutorial]mod_rewrite Moderat de Judge
Autor
Mesaj Pagini: 1
-esc-
Administrator

Inregistrat: acum 16 ani
Postari: 126
Deci, ce mai e şi mod_rewrite (botezat şi modrewrite sau mod rewrite) ăsta? Pe scurt: o metodă de a rescrie URL-uri on the fly.


    Motive pentru rescrierea URL-urilor sunt multe:


    *     uşurinţa de memorare a adreselor de către utilizatori
         

    *     estetica
         

    *     1337 ph33lin' :mrgreen:
         

    *     indexarea mai facilă de către motoarele de căutare (o mare vrăjeală, BTW, nu mai e cazul de ceva ani)
         

    *     poate şi altele
         



    Mulţi încearcă s-o facă, atraşi de ideea că asta o sa-i propulseze pe primele locuri în motoarele de căutare. Problema e că de obicei nu prea ştiu ce scriu/fac paste în .htaccess-ul ala "care este" (treaba le pare un fel de voodoo).


    Acest tutorial încearcă să-i lămurească pe cei dispuşi să înveţe. Majoritatea informaţiei de aici provine chiar din manualul lui mod_rewrite.

    ÃŽncă ceva: nu veţi găsi aici copy'n paste ready codeâ€Â¦ Sorry, dar va trebui să vă folositi creierul pe care vi l-a lăsat statul :twisted: . Astea fiind spuse, să-i dăm drumul.


    Noţiuni de bază



    Cu mod_rewrite se pot face o groază de chestii, dar scopul nostru e să avem URL-uri sexy, nu? Pentru asta, trebuie stăpânite 4 directive de configurare pentru Apache, şi aşa-numitele Perl-compatible regular expressions (PCRE). Să le luăm pe rând.


    Directivele de configurare



    Fişierele de configurare pentru Apache sunt compuse din aşa-numitele directive. Acestea sunt nişte comenzi care pot avea unul sau mai mulţi parametri, şi fiecare modul încărcat adaugă setul propriu de directive la cel deja recunoscut de apache. Din ce ştie mod_rewrite, utile scopului nostru sunt următoarele directive:


    *     
              RewriteEngine: controlează dacă se face rescrierea URL-urilor, şi are un singur parametru care poate fi on sau off (evident că trebuie să fie on  )
         

    *     
              RewriteBase: îi spune motorului de rewrite care este calea relativ la care face rescrierea; această cale este extrasă din URL, şi este adăugată la loc după ce au fost evaluate regulile de rescriere. Are un singur parametru, care e o care relativă la document root (de exemplu, site-ul ăsta are RewriteBase /~iacobs/)
         

    *     
             


                  RewriteCond: poate fi folosită pentru a condiţiona evaluarea directivei RewriteRule următoare. Are 3 parametri:
             

             

          o             valoarea care se testează (pe noi ne interesează numai %{REQUEST_FILENAME}, lista completă e dată in link-ul de mai sus)
                       

          o             testul propriu-zis, testele care ne interesează pe noi fiind -f şi -d
                       

          o             un flag opţional care poate fi NC(nocase) sau OR(ornext).
                       

                   
             


                  Practic, RewriteCond ne interesează numai pentru a verifica dacă adresa cerută e un fişier (-f) sau director (-d) pe disc, caz în care nu mai efectuăm rescrierea URL-ului. De obicei, partea de RewriteCond apare pe la început, şi conţine un

Code:

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [L]

* RewriteRule: cea mai importantă directivă, e cea care face rescrierea propriu-zisă. Are 3 parametri, ca şi RewriteCond:
             

          o             URL-ul de rescris, relativ la RewriteBase (PCRE)
                       

          o             adresa cu care să-l înlocuiască
                       

          o             flag-uri
                       

                   
             


                  De toate astea mă voi ocupa mai pe larg în continuare, când voi vorbi despreâ€Â¦
             

         



    Regular Expressions



    Şi am ajuns la partea cea mai importantă, expresiile regulate sau PCRE. O să mă ocup de ele cât mai concis cu putinţă (pe tema asta s-au scris cărţi întregi). So:


    Operatorii cei mai importanţi



    *     
              (): grupare; pe scurt, când expresia dintre paranteze selectează un text, acesta este păstrat într-o variabilă:
             

          o             
                            $1 pentru prima paranteză,
                       

          o             
                            $2 pentru a 2-a,
                       

          o             Ã¢€Â¦
                       

                   
             


                  ordinea variabilelor e dată de ordinea deschiderii parantezelor, deci (expr1(expr2)) va pune în $1 textul selectat de paranteza din exterior şi în $2 pe cel selectat de paranteza din interior.
             

         

    *     
              []: clasă de caractere; poate să conţină o listă de caractere gen [abc123,>] sau un interval, ca [a-z0-9], acestea putând fi combinate între ele, ca în [a-zA-Z0-9,:].
             


                  Funcţionalitate: selectează oricare dintre caracterele din listă - ultimul exemplu o sa selecteze orice literă mică sau mare, cifră, virgulă sau 2 puncte, lucru folositor atunci când vrem să selectăm exact ce date intră în scripturi (de exemplu, dacă ştim că un ID trebuie să fie numeric, folosim [0-9] şi eliminăm datele aiurea încă înainte să ajungă la script).
             

             


                  Pentru a nega selecţia, se pune ^ la începutul listei.
             

         

    *     : escape; îi spune parser-ului de PCRE să trateze următorul caracter ca pe unul normal, permiţând să se selecteze şi ()[]. etc.
         

    *     
              . (punct): selectează orice caracter
         

    *     
              ^: selectează începutul de rând
         

    *     
              $: selectează sfârşitul de rând
         

    *     
              |: alternare, abc|def selectează abc sau def
         



    Cuantificatori



    Ne permit să specificăm de câte ori are voie să ruleze (selecteze caractere) o expresie.


    *     
              *: selectează de 0 sau mai multe ori; ex: .* găseşte orice text de orice lungime, inclusiv textul nul
         

    *     
              +: selectează de 1 sau mai multe ori; ex: .+ găseşte orice text de cel puţin un caracter lungime
         

    *     
              ?: selectează de 0 sau 1 ori; ex: .? găseşte orice text de cel mult un caracter lungime
         

    *     
              {n}: selectează de exact n ori; ex: a{3} găseşte aaa
         

    *     
              {m,n}: selectează între m şi n ori; ex: a{1,3} găseşte a, aa, aaa; selecţia încearcă întotdeauna să găsească cel mai lung text posibil
         

    *     
              {n,}: selectează de cel puţin n ori; ex: a{3,} găseşte orice înşiruire de a mai lungă de 3 caractere.

EXEMPLE

    Din exemple se învaţă cel mai bine:

Code:

RewriteRule ^pages/(home|about).html$ index.php?page=$1 [L]

Explicaţii: atunci când cineva cere


   


    serverul va afişa pagina


   


    Un exemplu mai complex:

Code:

RewriteRule ^magazin/raft([0-9]+)/produs([0-9]+).html$ shop.php?cat=$1&prod=$2 [L]

Explicaţii: atunci când cineva cere


    http://www/example.com/raft20/produs5.html,


    va primi


   


    OK, vă ajunge pentru azi, dragii moşului! La muncă!


_______________________________________


pus acum 16 ani
   
Pagini: 1  

Mergi la