articolul mod_rewrite

Crearea de legături cu mod_rewrite „ușor de înțeles“ pentru motoarele de căutare.

Mod_rewrite nu se poate schimba URL-ul din browser-ul utilizatorului

De asemenea, este important să se înțeleagă că lucrările mod_rewrite cu URL-ul după ce serverul primește cererea HTTP și înainte de script-ul este executat sau procesat conținut. Astfel, mod_rewrite poate schimba calea fișierului pe server și variabilele asociate cu URL-ul cerut, dar nu se poate schimba conținutul trimis la server.

Cum de a schimba URL-ul dinamic static

Aici este algoritmul care trebuie efectuate pentru a crea o adresă URL statică pentru site-uri dinamice:



  • Conversia toate link-uri către toate paginile într-un format static. Acest lucru se face de obicei prin schimbarea bazei de date sau script-ul care generează aceste pagini. În unele cazuri, această sarcină se ocupe rapid funcția PHP - preg_replace ().
  • Adăugați la fișier httpd.conf sau reguli mod_rewrite .htaccess pentru transformarea internă a URL-statice, care au fost solicitate de către client, o formă dinamică necesară pentru a apela generarea de conținut script-ul.
  • Adăugați cod mod_rewrite suplimentar pentru a direcționa cererile clientului pentru URL-ul dinamic și le (redirecționare extern) redirecționează la adresa URL statică corespunzătoare. Pentru a face acest lucru, utilizați redirecționările 301 ( „mutat definitiv“), care va notifica motoarele de căutare care în loc de URL-ul dinamic vechi pe care doriți să utilizați noua static. De asemenea, o redirecționare extern redirecționează vizitatorii care au accesat site-ul dvs. folosind link-ul dinamic vechi din marcaje.

Având în vedere cele de mai sus, putem ghici că ambele formate: URL-ul dinamic și static trebuie să conțină toate informațiile necesare pentru a converti în alt format. Și amintiți-vă că o selecție atentă a „Design“ URL-statică în viitor, vă puteți salva o mulțime de probleme, precum și a reduce numărul de cicluri CPU, care poate crește puternic în timpul punerii în aplicare ineptă a unui astfel de transformare.

Anunț important

Scopul acestui articol nu include o explicație a principiilor lucrării de expresii regulate și modulul mod_rewrite. Documentația privind mod_rewrite și multe alte manuale sunt ușor accesibile tuturor participanților.

Încercarea este de a utiliza mod_rewrite fără cunoașterea deplină a acestei documentații - un prim pas (și de multe ori ultima) la probleme serioase. Amintiți-vă că impactul mod_rewrite configurația serverului dvs. și destul de o greșeală de tipar sau logic, pentru a face site-ul indisponibil pentru vizitatori sau rapid reduce dvs. Topul în motoarele de căutare. Și dacă venitul depinde de site-ul, atunci va trebui să examineze în special toate documentele cu atenție.

Aflați mai multe despre expresiile regulate pot fi găsite în cartea „Teach Yourself Expresii regulate“, pe care le puteți cumpăra în Bolero, sau în Amazon

Mai jos este un exemplu care poate fi folosit ca bază pentru construirea propriilor soluții.

exemplu de lucru

produs index.php = widgetcolor = bluesize = smalltexture = fuzzymaker = widgetco: format vechi URL dinamic?

Noul format URL static: / produs / widget / albastru / mici / neclare / widgetco

Codul mod_rewrite. utilizate în .htaccess:

Rețineți că „produsul“ cuvânt este întotdeauna prezent în formatul static și dinamic. În acest caz, mod_rewrite mai ușor de a defini interogări, în cazul în care este necesar să se aplice regulile de mai sus. Alte metode, cum ar fi verificarea existenței fișier, poate fi de asemenea folosite, dar acestea sunt mai puțin eficiente și mai predispuse la erori de comparație.

Diferențele între utilizarea .htaccess și httpd.conf

Dacă utilizați reguli mod_rewrite în fișierul de configurare httpd.conf container. atunci trebuie să adăugați o expresie regulată ambele directive RewriteRule slash (/). De exemplu, necesitatea de a schimba "RewriteRule ^ $ index.php" la "RewriteRule ^ / index.php $". De asemenea, amintiți-vă că trebuie să reporniți serverul pentru modificările din fișierul de configurare pentru a intra în vigoare.

Cum funcționează

Acum, să vedem cum un păianjen motor de căutare accesează site-ul utilizând URL-ul dinamic vechi:

Plasarea regulilor mod_rewrite

Pentru codul de mai sus a fost de lucru în mod corespunzător, ar trebui să fie plasat în fișierul .htaccess în același director ca și /index.php. Acesta poate fi, de asemenea, plasate într-un container în httpd.conf. care se referă la acest director.

expresii regulate

Aici voi da doar un comentariu la expresiile regulate utilizate mai sus. Am evita utilizarea foarte simplu și popular, dar este foarte structuri ineficiente „(. *) / (. *)“. Pentru utilizarea mai multor structuri. „*“ Este foarte ineficient în expresii regulate.

Motivele pentru aceasta sunt două. Primul - „*“ înseamnă «pentru a înlocui orice număr de orice caracter.» Iar al doilea - design-ul este foarte „vorace“, ceea ce înseamnă că modelul va fi înlocuit în numărul maxim posibil de caractere „*.“. Aceasta înseamnă că, înainte de URL-ul cerut va coincide sau nu coincide cu expresia regulată, va exista o pluralitate de permutare, al căror număr este egal cu (numărul de simboluri între „/“ și sfârșitul URL-ul cerut minus 2) înmulțit cu (numărul „(. *) „minus unu). Este ușor de a face o expresie regulată cu o varietate de „(. *)“. analiza care va necesita zeci sau chiar sute de treceri.

Să ne uităm la un exemplu rapid. Feedback $ 1 conține caractere care sunt substituite în primul „(. *)“. și $ 2 - caracterele sunt substituite în al doilea:

probleme comune

atunci când testarea probleme

În ceea ce privește .htaccess. și la httpd.conf înainte de a testa orice modificări nu uitați să goliți memoria cache a browserului. În caz contrar, browser-ul se va ocupa una dintre paginile solicitate anterior din cache. Este clar că, în acest caz, noul cod nu va fi executat.

Citiți mai întâi, apoi a scrie și de testare