Există o mulțime de moduri de a crea CNC:
+. destul de simplu în metoda de punere în aplicare - rulat în regulile .htaccess și totul aici
-: este necesar ca, pe serverul mod_rewrite în sine a fost stabilit, la обмемном un site - acumularea de reguli in.htaccess
Arunca acțiune /index.php
Forța de tip aruncată
Aplicația ForceType / x-httpd-php
Aceste directive vor redirecționa toate solicitările. care nu conține un punct. pe index.php. În plus față de dezasamblare interogare - nu deosebit de dificil.
+: aceeași ușurință de punere în aplicare
-: este necesar ca modulul mod_action să fie instalat pe server
+: IMHO cea mai ușoară cale, nimic de instalat pe server nu este necesar, în indexul primit o cerere. procesate și bucurându-se
-: pe jurnalele serverului se acumulează mesaje despre 404 adrese URL. Este necesar să dezactivați înregistrarea acestor erori.
Încă este necesar să spunem că, chiar și după redirecționarea cererii dintr-o adresă URL inexistentă la un fișier existent, serverul va afișa pagina dorită, dar totul va reveni la staat 404 exact pentru această pagină. Că nu a fost - este necesar la începutul index.php să adăugați antet ("http / 1.0 200 Ok");
Sunt sigur că există mai multe metode, dar ne vom limita la acestea.
În cazul meu, prima metodă nu avea sens. este neclar dacă hoster va avea mod_rewrite pe server (deși costă de obicei;)). Al doilea - nu a mers pentru mine. Nu știu de ce, (a treia rămasă din modul în care el tocmai a câștigat cum era de așteptat Dificultatea consta în transformarea CNC shnogo Urla și regulate, și vice-versa CMS Joomla (si multe altele aparent) utilizate pentru aceste scopuri, baza de date și generează în mod dinamic adrese URL noi ... . MNU nu se grăbește bo a lucrat cu aceeași Jumla era convins că partea leului a timpului petrecut pe formarea paginii și de căutare pentru formarea acestor URL-uri într-o bază de date ar fi de dorit să se găsească o soluție fără o bază de date, și l-am găsit în linia de jos este un set de reguli de forma ...:
Pentru a procesa astfel de adrese URL, am scris o clasă specială (clasa însăși și fișierele de probă pot fi găsite la sfârșitul articolului). Nu vom dezasambla clasa însăși, dar vom vedea căile de aplicare a acesteia pe exemple.
dacă ($ use_ufu == 1) require_once ("Links.rules.php"); // încărcați fișierul de reguli
dacă (isset ($ linksUrls) is_array ($ linksUrls)) // dacă există un matrice cu reguli - faceți inițializarea
$ link-> init ($ linksUrls);
>
Conținutul fișierului Links.rules.php:
$ linksUrls = array ();
$ linksUrls # 91; # 93; = array ('news', 'do =?');
$ linksUrls # 91; # 93; = array ('news /?', 'do =? news_id =?');
// pagini mod
$ linksUrls # 91; # 93; = array ("pagini", "do =?");
$ linksUrls # 91; # 93; = array ("pagini /?", "do =? pid =?");
dacă (! $ links-> parseURL ($ url)) // eroare 404;
die ("Ne pare rău, pagina nu a fost găsită");
>
>
print_r ($ _GET);
Dacă totul a mers bine, variabilele vor fi adăugate la matricea $ _GET, care a fost folosită pentru interogarea normală. Trebuie spus că cererea ar trebui să fie de forma / pagini / 2 De asemenea, ar trebui să specificați că puteți specifica variabile care nu sunt definite în reguli ca în interogarea obișnuită / pagini / 2? Foo = 5
// result: site.com/pages/
Cu siguranță înțeleg că metoda nu este universală, dar este destul de simplă de implementat, ușor de utilizat.
În orice caz, voi fi recunoscător pentru orice comentarii / critici, deoarece acestea pot contribui la îmbunătățirea codului \ method \ way;)
TODO: Acum urlul NCL-shlny se formează prin combinarea valorilor de la adresa URL obișnuită folosind "/". În viitor, am în vedere eliminarea legării la ordinea variabilelor din adresa URL obișnuită.
Clasa și exemplele sunt aici.
UPD: o metodă mai adecvată este descrisă în articolul CNC
mâini (PHP). Stocare CNC în baza de date
În general, mulțumesc pentru articol, folosit pentru a încerca prin intermediul Htaccess, dar nu a funcționat, acum voi încerca prin clasa ta)))
Încercați, scrieți cum sa procedat.
PS: Acum scriu un alt articol despre CNC (care dezvăluie principiul independenței sistemului CNC).
ZYY: În tehnologia descrisă (și anume ErrorDocument 404 / index.php) există un dezavantaj semnificativ - incapacitatea de procesare a datelor postale. Prin urmare, sfătuiesc toți să utilizeze modulul pentru a direcționa toate solicitările către pagina index.
Metoda este acceptată, totuși.
ce avem în $ _SERVER ["REQUEST_URI"]? Șirul formularului: /? / News / 2.
Singurul dezavantaj este un semn de întrebare. Pro: nimic pe server nu este setat. htaccess și jurnalele nu ating.
IMHO este mai ușor și mai bine pentru a pune în revistă .htaccess pe index (și anume, revin, nu index director). Deci, și bustenii nu se vor înfunda. Dar semnul de întrebare din URL-ul - eu personal nu-l place)
%% este încă o opțiune pentru stocarea adreselor URL în baza de date, la fel ca și jumla (mai exact SEF), dar această opțiune este potrivită pentru site-uri mici.
Acest lucru și câteva opțiuni voi descrie firul din articol. va apărea ora ridicată =)
Un model cu fantă vikoristovuvati menținut în amonte router Yaky fіltruє peredavaєmі parametru via preg_match, iac Taqiy vikoristali în ZendFramework