Chip-uri proprii (php)

Există o mulțime de moduri de a crea CNC:

  • mod_rewrite este o tehnologie frecvent utilizată. Ideea este de a instala spetsovogo modul pentru Apache și adăugarea unei reguli pentru convertirea slash-uri scurte integral în RewriteRule .htaccess ^ fișier (# 91; * / # 93; *) \ RSS /rss.php?type=$1. # 91; L # 93;

    +. 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

  • FileMatch - Bazat pe directiva FilesMatch, care în Apache este o caracteristică de bază. E simplu. Din nou, scriem. 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

  • ErrorDocument - bazat pe fișierul .htaccess din fișierul .htaccess pentru a transfera cererile de la adrese URL inexistente la fișierul specificat. Pentru aceasta, în .htaccess trebuie să adăugați:
  • ErrorDocument 404 /index.php ErrorDocument 401 /index.php

    +: 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.

  • Conectarea și utilizarea CNC-ului pe site $ links = link-uri noi ($ url, $ use_ufu); // $ url - numele site-ului. Vor fi adăugate la referințe la generarea, $ use_ufu (0 \ 1) - folosiți CNC sau nu
    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 =?");

  • Analiza adresei URL NC-shnoo și formarea cererii GET dacă (isset ($ _ SERVER # 91; 'REDIRECT_STATUS' # 93;) $ _SERVER # 91; 'REDIRECT_STATUS' # 93; == '404') $ url = $ _ SERVER # 91; 'REQUEST_URI' # 93 ;;
    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

  • Generarea unui NC dintr-o interogare normală
  • $ link-> createUFU ('index.php? do = pagini');
    // 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

    Articole similare