NC на mod_rewrite

влизане

Метод за създаване на NC (използвайки mod_rewrite) и няколко полезни връзки.

Стани уважаван spectator.ru prokopipestili от сто пъти. И пиша за това, което методи са там, аз няма да се създаде ЦПУ.

За тази цел има специален модул в Apache нарича mod_rewrite. Тя ви позволява да "perepisyvyvat URL адреси", тоест, да ги конвертирате "в движение" от правилата, които го описват.

Доста пълна документация може да намерите тук. Но това е доста суха, а тези, които за пръв път се сблъскват с mod_rewrite модула, че ще бъде трудно да го разберат.

Само няколко полезни връзки и това ще е достатъчно:

Не е работа модул mod_rewrite? Как да проверите дали модулът е свързан?

проверете дали модулът е инсталиран на уеб сървър

  1. Проверете Apache (httpd.conf) конфигурационен файл
  2. Проверка на сървъра с примери. Ако сървърът работи без грешка - инсталирана mod_rewrite. Ако не, ще получите съобщение, когато се обаждате всеки уеб-страница: "Вътрешна грешка в сървъра"

RewriteEngine по - включва модул без последващи директиви ще бъдат игнорирани.

Как mod_rewrite

Директива - отборът, неразделна част от езика. За да създадете НК често използват две deriktivy: RewriteCond и RewriteRule.

RewriteCond - състояние, при което ще работи RewriteRule.

RewriteRule - всъщност преобразува URL адреса, съдържа само състояние (образец), в която ще бъде URL «заловен» и се превръща.

Следващият ред RewriteCond се променливата% (променлива съдържа пълния път в сървъра файловата система на файла или скрипт, това е просто в нашия случай) и проверка на състоянието Г ( «!» - няма, «Г» - е обикновен файл)! , Работил състояние (няма такова «novaya_statya.html» файл), давай напред.

Състояние в RewriteRule (наречена "Шаблон" - да свикна с него) е написана под формата regulrnogo израз на «^ ([^ /] *) HTML $.». Нашата линия се тества по регулярен израз (регулярен израз има съвпадение и да го запазите в променливата $ 1). Всички условия са изпълнени! RewriteRule да пренасочи искането ни /index.php?page= novaya_statya

Вървяхме през кода от горе до долу и тя работи, но в действителност всичко не е така! Първите няколко точки в RTFM специално посветено на начина, по който ни единица е дори представи съответната схема. Трябва да се помни едно нещо: mod_rewrite първоначално е на първо място в RewriteRule, за търсене на съвпадение модел в образец за регулярен израз съхранява в променлива, която искате, и след това просто отива в RewriteCond (съответстваща на нашето обръщане правило) и прави проверка на състоянието. Той също така ви позволява да продължите да следите RewriteCond, че си спомняте в регулярния израз, и той се нарича обратна връзка.

Твърдо структура за NC

Много просто направите:

И тогава в PHP разбор QUERY_STRING по рафтовете на магазините. Но това QUERY_STRING да получите всичко, което желаете и ще бъде необходимо да разгледа всички възможни случаи. Да, "всички възможности" - намек за регулярни изрази. Мисля, че по-рано как НК ще се срещне в моя сайт. Така че защо да не използвате регулярни изрази в mod_rewrite и не ограничават мястото на логиката на двигателя само заключение, че наистина?

Чували ли сте за "гнездене" страница. Лошо, ако потребителят трябва да натисне пет пъти, за да стигнат до "целевата страница"? Тя може да струва граница и след това да се предотврати CNC /categor/subcategory/subsubcategory/subsubsubcategory/article.html. И това не е нещо ново, аз ти казвам ...

Изготвяне на регулярен израз за mod_rewrite, грешки улов

Аз разпъна на целия списък на две части, като «.html» и без тях, и написа две регулярни изрази (а може би не трябва да се прави това, но за мен е по-лесно по този начин):

Всички URL, който съвпада с регулярен израз - ще се трансформира. И с другия:

Съжаляваме, страница за грешка 404 не е намерен.

Така че, в моя случай:

Всичко останало, което трябва сами да приложи. Благодаря ви за вниманието.

Защо този код няма да работи на Apache 1.3, грешка. Htaccess: RewriteRule: не може да се компилира с постоянен израз "^ (: ([^ / \.]) [/]?) (:? ([. ^ / \]) [/]) $?", т.е. Регулярният израз е невалиден. Как да се промени, които ще работят по Apach 1.3?

Благодаря ви много за разумно обяснение! Без фините вериги не може да получи .php разширение в края на URL.

да Vital: Пропуснат знак плюс след ^ (: (въпреки че тя може да бъде в моите послания знак плюс почистват проверка [^ /.]: ^ (?. [^ /] () [/]) (:? ([^ / .]) [/]?)? $