Экономика стран

К сожалению, большинство людей, которые будут ими затронуты почти весь мир, не будут иметь никакого влияния на результат. Вести Экономика Дайджест иностранной прессы за 14 августа.
Вести Экономика Греции снова придется списывать долги Греция не сможет самостоятельно расплатиться по долгам, и понадобится новая реструктуризация долгов, чтобы спасти страну от банкротства.

ЧПУ своїми руками - як зробити SEF посилання?

  1. Що таке ЧПУ?
  2. Які переваги дають SEF URL?
  3. Недоліки ЧПУ посилань
  4. Коли ЧПУ не потрібні?
  5. Що ще потрібно знати про ЧПУ?
  6. Коротко: в чому вся суть?
  7. Створення SEF посилань за допомогою mod_rewrite
  8. Правила та умови mod_rewrite
  9. Квантіфікатори або квантори
  10. екранування
  11. Обмеження початку і кінця рядка (маркери)
  12. Зворотні зв'язку в mod_rewrite
  13. прапори
  14. Живий приклад використання mod_rewrite
  15. Будь ласка, оцініть цю статтю
  16. Стаття виявилася вам корисною? Підпишіться, щоб не пропустити нові!

Замітка: активована адаптивна версія сайту, яка автоматично підлаштовується під невеликий розмір Вашого браузера і приховує деякі деталі сайту для зручності читання. Приємного перегляду!

06.05.2013

Здрастуйте дорогі гості та постійні читачі блогу про створення сайтів - Site on! В одній з попередніх статей цього розділу я обіцяв вам розповісти, як все за пару хвилин можна створити власні ЧПУ посилання. Незважаючи на те, що стаття може здатися вам об'ємної, а для деяких і складною - я сподіваюся, коли дочитаєте її до кінця, ви погодитеся, що в створенні ЧПУ дійсно немає нічого надприродного.

Що таке ЧПУ?

Що таке ЧПУ

ЧПУ - це зіпсована англомовна абревіатура SEF URL (search engines friendly url). Вона позначає адреси посилань, які доброзичливі для пошукових систем. Про ЧПУ я також писав у статті про внутрішню оптимізацію сайту . У російськомовному варіанті SEF URL пишеться як ЧПУ - людино-зрозумілі url. Що все це означає? Це означає, що адреси ваших посилань матимуть усвідомлений текст, а не технічний сміття, за прикладом можете сходити за посиланням вище.

Які переваги дають SEF URL?

По-перше, очевидно, що ЧПУ посилання вже в самому своєму адресу містять корисну для користувача інформацію. З такої адреси відразу зрозуміло, про що буде стаття або сторінка в цілому.

По-друге, SEO. Такі посилання вітаються пошуковими системами, пару років тому вони могли б дати вам значну перевагу над конкурентами. Сьогодні подібні посилання є само собою зрозумілими, зараз рідко зустрінеш сайти з не ЧПУ посиланнями, однак вони досі є.

По-третє, це престиж. Коли я заходжу на сайти, де замість зрозумілого і красивого адреси в посиланнях міститься різного роду сміття, а то і засекречена інформація - я задаюся питанням: «Нібито пристойна сайт, але чому розробники не зробили ЧПУ? Невже це було так складно? Може їм настільки байдуже до подібних речей або просто не вистачає знань і навичок? ». Загалом, для мене такі сайти велика загадка.

По-четверте, безпеку. Сайти з ЧПУ посиланнями не містять в своєму адресу технічну інформацію передану методом GET ( уроки PHP ), Яку можна запросто використовувати для злому сайту.

І останнє: ЧПУ - як засіб навігації. Якщо посилання зрозуміла користувачеві, то він сам може переходити по розділах сайту, просто редагуючи ваш URL. наприклад:

http://site-on.net/useful/2-sublime-text-2

Якщо видалити з даної посилання її останню частину (2-sublime-text-2), то ми потрапимо в розділ, до якого стосується ця стаття:

http://site-on.net/useful/

В даному випадку це розділ «Інструменти» . Тобто завдяки SEF посиланнях ми можемо побудувати зрозумілу людям і роботам ієрархію нашого сайту, що знову-таки буде корисно і для відвідувачів і для просування в пошукових системах.

Недоліки ЧПУ посилань

Перше: можливо, вам доведеться повозитися і навіть помучитися, щоб їх налаштувати або зовсім зробити з нуля.

Друге: ваш сайт стане довше вантажиться, а саме, на пару десятитисячних секунди :) Це пов'язано з тим, що для роботи ЧПУ підключається спеціальний модуль веб-сервера Apache - mod_rewrite, якому знадобиться це «величезна» кількість часу на обробку посилань.

Коли ЧПУ не потрібні?

ЧПУ посилання можуть бути і зайвими, наприклад, якщо у вас закритий корпоративний портал, де вся робота здійснюється тільки авторизованими користувачами, а для всіх інших, в тому числі і для пошукових роботів доступ закритий.

Також ЧПУ буде надмірністю в back-end вашого сайту, тобто в панелі адміністратора.

Що ще потрібно знати про ЧПУ?

У всіх актуальних версіях CMS дана проблема вже вирішена. Все що вам потрібно, щоб зробити ЧПУ посилання, це лише включити відповідні налаштування в движку вашого сайту.

Але що якщо ми маємо справу з сайтом на чистому PHP, без CMS, або ж хочемо розробити свою власну CMS в якій хочемо зробити SEF URL? Для подібних випадків, а також для людей, які хочуть заглибитися і зрозуміти всю суть перетворень звичайного посилання в ЧПУ, я і написав іншу частину статті. Якщо ви читали мої попередні статті, то знаєте, що мій блог якраз відноситься до цієї категорії, тобто сайтам, написаним з нуля на PHP, без використання готових CMS.

Ах так, ще один момент: з особистого досвіду не раджу робити кириличних URL.

Коротко: в чому вся суть?

Пишу для тих, хто зовсім не в курсі справ. Скрізь в наших тегах гіперпосилання ми будемо вказувати ЧПУ адреси:

<a href="http://site-on.net/useful/2-sublime-text-2"> Sublime Text 2 </a>

Суть в тому, щоб з красивого і зрозумілого людині URL (ЧПУ) зробити на льоту URL, який буде корисний розробнику PHP (НЕ ЧПУ):

<a href="http://site-on.net/index.php?category=useful&article=2-sublime-text-2"> Sublime Text 2 </a>

При цьому все на світі (відвідувачам, пошуковим системам, усім) буде видно саме ЧПУ посилання, але ми як розробники PHP знатимемо, що таїть у собі URL насправді. В кінці статті, для повного розуміння, я покажу всі етапи, як ЧПУ працюють у мене на блозі.

Створення SEF посилань за допомогою mod_rewrite

mod_rewrite - це модуль веб-сервера Apache, призначений для перезапису URL. Природно, для початку роботи ви повинні включити цей модуль в налаштуваннях Apache, ці настройки знаходяться в файлі httpd.conf, вам потрібно буде розкоментувати рядок з ім'ям даного модуля. У 99% хостинг-провайдерів він включений, за винятком зовсім жахливих хостингів. До речі кажучи, використовуючи Denwer, у мене не вийшло нормально налаштувати власні ЧПУ, мені не захотілося довго шукати в чому саме проблема (заважають власні редіректи Денвера) і я встановив Апач окремо. Для тих, хто не знає, як встановити сервер Апач не використовуючи Денвер, я напишу інструкцію в одній з майбутніх статей. А тут ми продовжуємо розбирати наші ЧПУ.

Всі наші правила перетворень URL записуються в відомий файл .htaccess, який повинен лежати в корені нашого сайту.

Для коректної роботи mod_rewrite в ньому обов'язково повинна бути написана наступна рядок:

Options + FollowSymLinks

Або, зокрема, для мого хостингу :

Options + SymLinksIfOwnerMatch

Далі підключаємо наш модуль rewrite до конкретної папці, тобто до папки, в якій лежить наш .htaccess:

RewriteEngine On

Маємо наступний файл .htaccess:

Options + SymLinksIfOwnerMatch RewriteEngine On

Правила та умови mod_rewrite

Всі правила записуються за допомогою команди RewriteRule, після якої ставиться пробіл і записується шаблон ваших ЧПУ за допомогою регулярних виразів, далі ставиться ще один пробіл і вказується рядок, в яку ми хочемо перетворити цей шаблон, де $ 1, $ 2, ... $ n - наші змінні . Більш докладно про регулярних виразах ви можете дізнатися з наведеної вище посиланням, а також далі в даній статті. Давайте розглянемо приклад:

RewriteRule ^ useful / ([az] *) /index.php?category=useful&article=$1

Де ^ useful / ([az] *) - це шаблон очікуваного url,

а /index.php?category=useful&article=$1 - це те, у що ми його конвертуємо, якщо прийшов URL підійшов під шаблон.

При цьому $ 1 дорівнює тому, що написано в круглих дужках, тобто $ 1 = [az] * Якби круглі дужки зустрічалися 2 рази, то у нас були б змінна $ 1 і $ 2, якщо круглі дужки зустрічаються 3 рази, то змінні $ 1, $ 2 , $ 3 і так далі. При цьому змінні створюються в тому ж порядку, як йдуть круглі скобочки.

Зрозуміло? - молодці. Не зрозуміло? - ходімо далі, ми ще до цього повернемося. Також хочу звернути вашу увагу на те, що для кращого розуміння статті, ви вже повинні мати початковими знаннями про PHP, а також про роботу з методами GET і POST. Продовжуємо.

Для того щоб наш обробник, тобто mod_rewrite не спрацьовував кожен раз без потреби, ми в RewriteRule вказуємо шаблон, якому повинні відповідати приходять URL. Якщо URL не відповідає шаблоном, то mod_rewrite просто не спрацює і не перетворює прийшов SEF URL в URL, з яким ми можемо працювати.

Тобто на даному етапі вам важливо зрозуміти саму суть: в ЧПУ посиланнях не передаються параметри, а без параметрів ми не можемо нічого зробити в PHP з цієї посиланням, тому за допомогою mod_rewrite ми перетворимо ЧПУ посилання без параметрів в НЕ ЧПУ посилання з параметрами. Що таке параметри? В наведеному вище прикладі маємо 2 параметра:

/index.php?category=useful&article=$1

Параметр category і параметр article.

Знову-таки звертаю вашу увагу, що про параметри ви вже повинні були знати, я лише коротко вам нагадав.

У шаблонах ми можемо використовувати символи і символьні класи. Символ точки позначає абсолютно будь-який символ.

  • . - будь-який одиночний символ
  • [redf] - це клас символів. Позначає наявність одного з перерахованих символів з урахуванням регістру.
  • [az] - клас символів. Позначає наявність одного з символів в проміжки від a до z, тобто весь англійський алфавіт.
  • [a-zA-Z] - те ж саме, тільки без урахування регістру, тобто весь алфавіт, включаючи і великі і маленькі букви.
  • Можна і з цифрами: [0-9]
  • Природно, все можна комбінувати: [a-zA-Z0-9]
  • [^ rewfad] - клас символів, але зі знаком ^ всередині квадратних скобочек позначає, що шаблон НЕ повинен містити даних символів.
  • site | cite - позначає альтернативу: підходить site або cite.

Квантіфікатори або квантори

Всі попередні приклади позначали один символ (одну одиницю), а що якщо ми хочемо показати, що символів з цього проміжку [a-zA-Z] може бути не один, а скільки завгодно. Для цього ми повинні використовувати квантіфікатори:

  • ? - 0 або 1 символ з попереднього тексту (класу символів, символу і тд.)
  • * - 0 або будь-яку кількість символів з попереднього тексту (n> 0)
  • + - 1 або будь-яку кількість символів з попереднього тексту (n> 1)
  • {n} - рівно n символів, де n - конкретне число.

наприклад:

  • {4} - має бути рівно 4 символу з попереднього тексту.
  • {4,5} - 4 або 5 символів
  • {, 6} - від нуля до 6 символів
  • {4} - від 4 до нескінченності символів

Прикладом може послужити наша вже відома рядок:

RewriteRule ^ useful / ([az] *)

В якій ми застосували квантіфікатор (квантор) зірочку (*) після класу символів [az]. Це означає, що в нашому URL після useful / можуть перебувати символи від a до z в будь-якій кількості і, природно, в будь-якій послідовності, а можуть і не бути зовсім. Домен в приводу не беремо, він мається на увазі сам по собі.

екранування

Також при складанні шаблону не варто забувати і про екранування . Якщо ви хочете укласти в клас символів, наприклад, символ точки, то вам потрібно її заекранувати, так як без екранування точка (службовий символ) позначає абсолютно будь-який символ:

[A-zA-Z0-9 \.]

Теж саме стосується і квадратних скобочек, вони у нас позначають клас символів, тому якщо у вашому url можуть бути квадратні скобочки їх потрібно заекранувати:

[A-zA-Z0-9 \. \ [\]]

Обмеження початку і кінця рядка (маркери)

Для того щоб вказати початок або кінець рядка, без урахування домену, використовуються символи:

  • ^ - початок URL
  • $ - кінець URL

Тобто в нашому першому прикладі ми вказали, що наш шаблон починається саме з початку URL, а не звідки завгодно (з середини, з кінця):

RewriteRule ^ useful / ([az])

Звертаю вашу увагу на те, що знак ^ всередині квадратних дужок позначає заперечення, не плутайте!

Зворотні зв'язку в mod_rewrite

$ n - це наша «змінна» в круглих дужках, про них ми вже говорили. Працює для RewriteRule.

% n - те ж саме, тільки в RewriteCond. RewriteCond ми ще не розглядали, він у нас попереду.

Отже, якщо RewriteRule - це наші правила перетворення URL, то RewriteCond - це умова, аналог if в PHP . RewriteCond потрібно в ситуаціях, коли вам необхідно виконати URL перетворення (RewriteRule) тільки при виконанні якогось умови.

У сервера є свої власні змінні, які ми можемо використовувати в наших умовах RewriteCond:

HTTP заголовки:
HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT REMOTE_ADDR
З'єднання і запит:
REMOTE_HOST
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE
Усередині серверні:
DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
Системні:
TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
спеціальні:
API_VERSION
THE_REQUEST
REQUEST_URI
REQUEST_FILENAME
IS_SUBREQ

Синтаксис застосування серверних змінних такий:

% {Змінна}

Давайте складемо наше перша умова:

RewriteCond% {HTTP_USER_AGENT} ^ Mozilla. * RewriteRule ...

Якщо відвідувач зайшов з браузера Mozilla Firefox, то виконуємо наступне правило. Як бачите, на відміну від PHP ми не використовуємо фігурні дужки для обрамлення нашого правила, яке виконається, якщо умова TRUE.

RewriteCond дозволяє використовувати оператори порівняння: <(менше),> (більше), = (дорівнює). Також є спеціальні значення, наприклад:

  • -d (чи є каталогом)
  • -f (чи є файлом)
  • -s (чи є файлом з ненульовим розміром)
  • ! - заперечення.

прапори

  • nocase | NC - можна писати або nocase, або NC, це одне і те ж, позначає регістру незалежних. Тобто ми можемо більше не писати:

RewriteRule ^ useful / [a-zA-Z]

Замість цього написати так:

RewriteRule ^ useful / [az] [NC]

  • ornext | OR - якщо це, або така умова TRUE, то виконуємо RewriteRule. приклад:
  • RewriteCond% {REMOTE_HOST} ^ host1. * [OR] RewriteCond% {REMOTE_HOST} ^ host2. * [OR] RewriteCond% {REMOTE_HOST} ^ host3. * RewriteRule ...

  • Last | L - останнє правило. Якщо право застосувати, то правила, розташовані нижче за кодом, не спрацюють.
  • next | N - якийсь аналог continue. Якщо право застосувати, змушує відігравати все правила з самого початку, але при цьому з вже перетвореної рядком.
  • redirect | R - редирект. За замовчуванням 302. Можна вказати інший код редиректу, наприклад:
  • [R = 301]

  • forbidden | F - URL стає забороненим.
  • gone | G - посилає 410 відповідь сервера.
  • chain | C-зв'язок. Якщо правило не спрацювало, то пов'язані з ним правила теж автоматично не спрацюють.
  • type | T - MIME-тип. Примусове виставляння типу файлу. Можна видавати одне розширення файлу за інше :) Наприклад, лежать у нас файли з розширенням .zip, а насправді це картинки, так от щоб віддавати ці файли як картинку (.png, .gif і тд.), Можна використовувати даний прапор .
  • skip | S - пропустити таке правило, можна вказувати відразу кілька, наприклад:
  • [S = 2]

  • env | E = VAR: VAL - встановити змінну оточення.
  • cookie | CO - послати куки.
  • Якщо потрібно поставити одночасно кілька прапорів, ставимо їх через кому, наприклад:

    [NC, L]

    Як ви вже могли здогадатися, mod_rewrite можна використовувати не тільки для ЧПУ, а й для багатьох інших цікавий цілей, наприклад, клоакинга - це метод чорного SEO, коли з одного й того ж адресою відвідувачам віддається одна сторінка, а пошуковим роботам абсолютно інша. Ну і під кінець статті, я покажу вам живий приклад використання всього написаного вище і як же це все працює взаємодіючи з нашим PHP.

    Живий приклад використання mod_rewrite

    Отже, ось який вигляд має мій файл .htaccess:

    Options + SymLinksIfOwnerMatch RewriteEngine On
    RewriteCond% {HTTP_HOST} ^ www \. (. *) $ [NC] RewriteRule ^ (. *) $ Http: //% 1 / $ 1 [R = 301, L]
    RewriteCond% {HTTP_HOST} ^ [^ www \.]. * $ [NC] RewriteRule ^ /? ([A-z0-9 \ - /] +) /? $ /Index.php?article=$1 [L]

    Що відбувається в цьому жаху? Для початку я перевіряю, не набрав людина старого гарту мою адресу з www, якщо набрав, то перенаправляю його на ту ж адресу, тільки без www. Навіщо саме це потрібно я напишу в одній з наступних статей, якщо коротко, то для SEO. Після перенаправлення з www на без www у нас заново вважався наш файл .htaccess, тому все починається знову: перевіряємо, чи не прийшов нам УРЛ з www, в цей раз - ні. Далі (другий RewriteCond) ми перевіряємо, якщо наш УРЛ дійсно без www, то робимо перетворення, а саме: заносимо весь URL (без імені домена) в параметр article.

    На цьому робота .htaccess завершена і на сцену виходить PHP. Наступний код розміщений в index.php:

    if (! empty ($ _ GET [ "article"])) {// перевіряємо параметр article на порожнечу switch ($ _ GET [ "article"]) {case 'значення1': $ page = 'шлях до php файла1 нашої сторінки'; break; case 'значення2': $ page = 'шлях до php файла2 нашої сторінки'; break; case 'значеніє3': $ page = 'шлях до php файла3 нашої сторінки'; break; ...} include $ page; // підключаємо потрібний файл, в залежності від прийшов параметра article}

    Про те, як працює конструкція switch , Я докладно писав у статті за вказаним URL. Ось і все, пані та панове! Нарешті наша стаття підійшла до логічного завершення, і тепер ви зможете попрактикувати отримані знання. Я прощаюся з вами до виходу нової статті, а наостанок хочу привести цікаву цитату:

    Brian Moore
    «Не дивлячись на тонни прикладів і документацію, mod_rewrite це Вуду. Страшенно кльовий Вуду, але все-таки Вуду. »

    Будь ласка, оцініть цю статтю

    Середня оцінка: 4.13 з 5 (голосів: 84)

    Стаття виявилася вам корисною? Підпишіться, щоб не пропустити нові!
    Ви можете допомогти розвитку проекту, зробивши всього 1 клік:

    Дякуємо!

    Що таке ЧПУ?
    Які переваги дають SEF URL?
    Що ще потрібно знати про ЧПУ?
    Коротко: в чому вся суть?
    Що таке ЧПУ?
    Що все це означає?
    Які переваги дають SEF URL?
    Невже це було так складно?
    Може їм настільки байдуже до подібних речей або просто не вистачає знань і навичок?
    Навигация сайта
    Реклама
    Панель управления
    Календарь новостей
    Популярные новости
    Информация
    Экономика стран www.mp3area.ru © 2005-2016
    При копировании материала, ссылка на сайт обязательна.