ПредишенСледващото

Той създал много начини за създаване на ЦПУ:

  • mod_rewrite - често използваната технология. Идеята е да се инсталира spetsovogo модул за Apache и добавяне на правило за преобразуване на късите цепки изцяло в .htaccess RewriteRule ^ файл (# 91; * / # 93; *) \ RSS /rss.php?type=$1. # 91; L # 93;

    +. сравнително лесно да се приложи метод - хукна към правилата на .htaccess и това е всичко

    -: Необходимо е, че сървърът е инсталиран правилно на mod_rewrite, с обемна сайт - правила натрупване в .htaccess

  • FileMatch - Въз основа на Директива FilesMatch, което е основната функция на Apache. Толкова е просто. Писане отново в .htaccess

    Действие хвърлей /index.php
    ForceType хвърлей


    ForceType прилагане / х-уеб--PHP

    Тези директиви ще пренасочват всички заявки. които не съдържат точки. на index.php. След това направи разбор на заявката - не е особено трудно.

    +: В същата лекота на изпълнението

    -: Необходимо е, че сървърът е инсталиран модул mod_action

  • ErrorDocument - въз основа на derektivy в .htaccess файла за искането за трансфер на несъществуващи адреси към определен файл. За това ние трябва да добавите към .htaccess:
  • ErrorDocument 404 /index.php ErrorDocument 401 /index.php

    +: IMHO най-лесният начин да инсталирате нищо на сървъра не е необходимо, в индекса получи искане. обработват и се радвайте

    -: На сървъра трупи натрупват доклади 404 urlah. това е необходимо, за да забраните дърводобива от грешки.

    Друго е да се каже, че дори и след искане пренасочва към несъществуващи черти на съществуващ файл, сървърът ще покаже правилната страница, но точно 404 staatu върнете на тази страница. Така че това не е - това е необходимо да се добавят Старт index.php с глава ( "HTTP / 1.0 200 Ok");

    Сигурен съм, че има много начини, но ние ще се ограничим с тези.

    В моя случай, не е имало начин да се вземе първото значение. не е ясно дали на сървъра на хоста стои mod_rewrite (макар и обикновено струва;)). Второ - не съм спечелил. Аз не знам защо, (останалата една трета от пътя той просто печели, както се очаква че трудността трансформацията на CNC shnogo Урла и редовно, както и обратното CMS Joomla (и много други привидно), използвани за тези цели, базата данни и генерира динамично нови URL адреси ... . MNU не бързам бо е работил при същия Jumla бил убеден, че лъвският пай от времето, прекарано на формирането на страницата и да търсите за формирането на тези URL адреси в база данни, би било желателно да се намери решение, без база данни, и аз го намери в най-долния ред е набор от правила за формата ...:

    За да се справят с тези URL адреси, аз написах spetsovy клас (на самия клас, както и примерни файлове могат да бъдат намерени vkontse статия). Демонтирайте самия клас, ние не ще, и posomtrite начини да демонстрират как примерите.

  • Свързване и използване на CNC Онлайн $ връзки = нови връзки ($ URL, $ use_ufu); // $ URL - името на сайта. Ще бъдат добавени към препращащата поколение, $ use_ufu (0 \ 1) - използването на NC или не
    ако ($ use_ufu == 1) require_once ( "Links.rules.php"); // зарежда от файла с правила
    ако (Isset ($ linksUrls) is_array ($ linksUrls)) // ако има масив с правилата - правя инициализация
    $ Links-> първоначален ($ linksUrls);
    >

    Съдържание Links.rules.php файл:

    $ LinksUrls = масив ();
    $ LinksUrls # 91; # 93; = масив ( "новини", "правя =?");
    $ LinksUrls # 91; # 93; = масив ( "новина /?" Do = news_id = ?? ");
    // мод страници
    $ LinksUrls # 91; # 93; = масив ( "страници", "правят =?");
    $ LinksUrls # 91; # 93 = масив ( "страници /?", "Do = PID = ??");

  • Анализ на CNC shnogo Урла и формирането на заявка за GET ако (Isset ($ _ СЪРВЪРА # 91; "REDIRECT_STATUS '# 93;) $ _SERVER # 91; "REDIRECT_STATUS '# 93; == '404') $ URL = $ _ СЪРВЪРА # 91; "REQUEST_URI '# 93 ;;
    ако // грешка 404 ($ links-> parseURL ($ URL)!);
    умре ( "За съжаление, страницата не е намерена '');
    >
    >
    print_r ($ _ GET);

    Ако всичко мине добре - в променливите масив на $ _GET ще бъде добавен, което използва използван в типичен поискване. Трябва да се каже, че искането трябва да бъде във вида / страници / 2-ро Трябва също да се посочи, че можете да зададете на променливите, които не са описани в регламента, както е по обичайния искане / страници / 2? Foo = 5

  • Генериране на конвенционален искане CNC
  • $ Links-> createUFU ( "index.php направя = страници?");
    // резултат: site.com/pages/

    Аз със сигурност се разбере, че процесът не е универсален, но това е доста лесно за изпълнение, лесен за използване.

    Във всеки случай, аз ще бъда благодарен за всякакви коментари \ критика, тъй като те могат да помогнат код \ метод \ метод, за да се подобри;)

    ЗАДАЧИ: Сега NC shnyj URL съединение, образувано от конвенционален стойност използване черти "/". В бъдеще планираме да премахнете задължителен ред на следващата променливи в обичайния Урла.

    Клас и примери са тук.

    UPD: по-подходящ метод е описан в статията си CNC

    ръце (PHP). база данни за съхранение на CNC

    Като цяло, благодаря за статията, по-рано през .htaccess се опитаха, но не работят, сега ще се опитам чрез вашия клас)))

    Опитайте се да постигнете целта си как е минало.

    PS: Пиша друга статия на ЦПУ (в който се описва принцип не зависи от системата за контрол.).

    ZYY: Описаната технология (а именно ErrorDocument 404 /index.php) има значителен недостатък - невъзможност да се справят пощенските данни. Ето защо, аз съветвам всички да използват една и съща revrayt модата да пренасочи всички заявки към индексната страница.

    Приетият метод, все пак.

    които му се изпречат на $ _SERVER [ "REQUEST_URI"]? линия тип: / / новини / 2 ?.

    Единственият недостатък - въпросителния знак. Плюсове: не слагат на сървъра. Htaccess и трупи не се допират.

    IMHO е по-лесно и по-добре да се сложи в .htaccess revrayn върху индекса (не revrayn директорите индекс). Същото важи и трупи, няма да бъдат запушени. Но въпросителния знак в Урла - Аз лично не ми харесва =)

    PS% има и друг вариант за съхранение на URL адреси в база данни, тъй като той прави същото Joomla (повече SEF), но тази версия на настоящия подход за малки обекти.

    Това, както и няколко опции ще опиша като нишка в статията. Здравейте появява текущото време =)

    Един модел прорез vikoristovuvati имаха преди рутер Yaky fіltruє peredavaєmі параметър чрез preg_match, як Taqiy vikoristali в ZendFramework

    Свързани статии

    Подкрепете проекта - споделете линка, благодаря!