NC pe mod_rewrite

intrare

O metodă de creare a NC (folosind mod_rewrite) și un cuplu de link-uri utile.

Fii un prokopipestili spectator.ru respectat decât o sută de ori. Și scrie despre ce metode sunt acolo, voi să nu creeze CNC.

În acest scop, există un modul special în Apache numită mod_rewrite. Acesta vă permite să „perepisyvyvat URL-uri“, care este, de a le converti „on the fly“ de regulile pe care l-ați descrie.

Destul documentație completă poate fi găsită aici. Dar este destul de uscat, iar cei care au confruntat mai întâi cu mod_rewrite modulul, va fi dificil să-l înțeleagă.

Doar un cuplu de link-uri utile și acest lucru va fi suficient:

Nu este de lucru modulul mod_rewrite? Cum de a verifica dacă modulul este conectat?

verificați dacă modulul este instalat pe un server de web

  1. Verificați Apache (httpd.conf) fișier de configurare
  2. Verificați serverul cu exemple. În cazul în care serverul se execută fără erori - mod_rewrite instalat. Dacă nu, veți primi un mesaj atunci când apelați orice pagina web: „Eroare internă de server“

RewriteEngine on - include un modul fără directive ulterioare vor fi ignorate.

Cum mod_rewrite

Directiva - echipa, o parte integrantă a limbii. Pentru a crea NC de multe ori folosesc două deriktivy: RewriteCond și RewriteRule.

RewriteCond - o afectiune in care va lucra RewriteRule.

RewriteRule - convertește de fapt URL-ul, conține doar condiția (modelul) în care URL-ul va fi «capturat» și convertit.

Următoarea linie RewriteCond ia variabilă% (variabilă conține calea completă în sistemul de fișiere server pentru fișierul sau script-ul, este doar în cazul nostru) și verificați starea -f ( «!» - Nu, «-f» - este un fișier obișnuit)! . condiție a lucrat (nici o astfel de «novaya_statya.html» fișier), mergeți mai departe.

Condiția în RewriteRule (numit "Template" - te obișnuiești) este scris în expresia forma regulrnogo «^ ([^ /] *) html $.». Linia noastră este testată de o expresie regulată (regex găsit o potrivire și salvați-l în variabila $ 1). Toate condițiile sunt îndeplinite! RewriteRule pentru a redirecționa nostru novaya_statya cerere /index.php?page=

Ne-am plimbat prin codul de sus în jos și a mers, dar, în realitate, totul nu este așa! Primul cuplu de paragrafe din RTFM dedicat în mod special modul în care unitatea noastră se prezintă chiar și schema relevantă. Ai nevoie să vă amintiți un singur lucru: mod_rewrite inițial vine mai întâi RewriteRule, uita la modelul de potrivire într-un model de expresie regulată stocată într-o variabilă pe care doriți, și apoi merge doar în RewriteCond (care corespunde convertirii noastre regulă) și face verificarea stării. De asemenea, permite să RewriteCond păstrați verificarea că vă amintiți în expresia regulată, și se numește feedback-ul.

Structura rigidă pentru NC

Mulți nu pur și simplu:

Și apoi în PHP analiza QUERY_STRING de pe rafturi. Dar acest QUERY_STRING poate obține tot ce-ti place si va fi necesar să se ia în considerare toate cazurile posibile. Da, „toate eventualitățile“ - o aluzie la expresii regulate. Cred că în avans modul în NC se va întâlni pe site-ul meu. Deci, de ce să nu folosească expresii regulate în mod_rewrite și nu limitează site-ul motorului de logica doar concluzia că există într-adevăr?

Ai auzit despre pagina „cuiburi“. Bad în cazul în care utilizatorul trebuie să apese de cinci ori pentru a ajunge la o „pagină de destinație“? Acesta poate costa limită și apoi CNC pentru a preveni /categor/subcategory/subsubcategory/subsubsubcategory/article.html. Și nu este nou, eu vă spun ...

Elaborarea de expresie regulată pentru mod_rewrite, erori de capturare

Am tăbărât întreaga listă în două părți, cu «.html» și fără ele, și a scris două expresii regulate (și, probabil, nu ar trebui să facă acest lucru, dar pentru mine a fost mai ușor așa):

Toate URL-ul care se potrivește cu expresia regulată - va fi transformată. Și cu cealaltă:

Ne pare rău, o pagină de eroare 404 nu a fost găsit.

Deci, în cazul meu:

Orice altceva, trebuie adăugați ei înșiși. Vă mulțumesc pentru atenție.

De ce acest cod nu va funcționa pe Apache 1.3, o eroare. htaccess: RewriteRule: nu se poate compila expresia regulată '^ (: ([^ / \.]) [/]?)? (:?? ([. ^ / \]) [/]) $?', și anume Expresie regulată nevalidă. Cum de a modifica, care ar lucra la Apach 1.3?

Vă mulțumesc foarte mult pentru o explicație rezonabilă! Fără a Circuitelor fine nu a putut obține .php extensie la sfârșitul adresei URL.

la Vital: ratat semnul plus după ^ (: ([^ /.] deși poate în mesajele mele semnul plus verificare de curățat: ^ (: ([^ /]) [/]) (:.??? ([^ / .]) [/]?)? $