Чпу ссылки на php

Не так давно излазив порядочное количество сайтов, так ничего и не нашёл по интересующей меня теме о простом ЧПУ для сайтов, материалы безусловно были, но рассказано очень уж непонятно и както размыто, создавалось ощущение будто авторы текстов сами не понимали о чём пишут. Это также напоминало отдалённый корявый перевод с другого языка, настолько корявый что теряется весь смысл.

Ну так вот и с тех самых пор я хотел создать свой материал об этой теме, который наконец раскроет тайны создание простого незамысловатого ЧПУ без излишеств, строго и эффективно. Будем создавать ЧПУ с использованием .htaccess и непосредственно mod_rewrite, но всё по порядку.

Итак, начнём. Для примера выдумаем небольшую ситуацию:

Допустим нам нужно чтобы файл index.php принимал 2 переменные, например cat и art, т.е index.php?cat=содержимое&art=содержимое. Пусть в рамках примера cat – категория, art – статья, и есть у нас материал доступный по адресу index.php?cat=php&art=info-chpu, но мы понимаем как некрасиво это будет выглядеть в адресной строке браузера и нам нужно чтобы наш материал был доступен по адресу php/info-chpu. Поэтому нам нужен ЧПУ:

Главная роль представляемого ЧПУ отдаётся файлу .htaccess именно он делает всю работу. Итак чтоже должно быть в файле .htaccess:

RewriteEngine On
RewriteRule ^(.*)/(.*)$ index.php?cat=$1&art=$2 [L]

Теперь попытаюсь объяснить содержимое файла .htaccess. Строка RewriteEngine On – используется для так сказать включения перенаправления, по правилам которые вы опишите. Пользователь переходит по ссылке php/info-chpu, запускается тут же содержимое файла .htaccess, которое видит что запрашиваемая ссылка php/info-chpu подходит по правилу (.*)/(.*), всвязи с чем разделяет запрашиваемый адрес по частям правила содержимое1/содержимое2 и передаёт их исполнительному файлу index.php?cat=содержимое1&art=содержимое2.

Вот и всё. Теперь всё что нам следует сделать это "ловить" и использовать нашим index.php две переменные cat и art.

Внимание если обработчиком php вы используете cgi-bin то вместо файла .htaccess у вас должен быть htaccess.txt

Всё максимально просто и понятно. Если вдруг вы столкнулись с какими-то трудностями в использовании предложенном мною ЧПУ для сайта, рекомендую скачать архив в котором всё настроено и работает – может быть вам будет так легче разобраться. В архиве 3 файла:

index.php – основной файл

htaccess.txt – файл для Cgi-bin обработчика

.htaccess – файл для Apache обработчика

Распакуйте содержимое архива к себе на сервер, и попробуйте запрос например /trololo/512 или любой другой, – как вы поняли писать не стоит, это я указал так место куда вы распакуете архив и откуда будете запускать файл.

Если остануться вопросы – пишите в комментариях.

Для тех, кто не понял что и как.

Вся суть данного ЧПУ состоит в htaccess файле, а что он именно делает?

RewriteEngine On
RewriteRule ^(.*)/(.*)$ index.php?cat=$1&art=$2 [L]

Можно сказать данный пример принимает адрес вида:

и отдаёт обработчикам ужи такого вида:


А мы уже файлом index.php принимаем $_GET[‘cat’] и $_GET[‘art’], которые в себе содержат название категории и материала.

Показанный в статье пример можно изменять как угодно.

Например у нас есть рабочий адрес domen.ru/avto.php?cat=sportcars&avto=porshe&model=carrera и если мы хотим сделать его ЧПУ вида:

, то пишем в .htaccess:

RewriteEngine On
RewriteRule ^(.*)/(.*)/(.*)$ avto.php?cat=$1&avto=$2&model=$3 [L]

И после того как мы добавим вешеуказанные пару строк в .htaccess файл, наш материал будет открываться для посетителей по адресу:

Или вдруг если у нас имеется несколько обработчиков PHP, то можно для каждого поставить правило в .htaccess:

RewriteEngine On
RewriteRule ^avto/(.*)$ avto.php? >RewriteRule ^air/(.*)$ forair.php? > RewriteRule ^flot/(.*)$ waterflot.php? >

Из примера видно, то всё запросы начинающиеся с domen.ru/avto/ будут отправляться в обработчик avto.php, начинающиеся с domen.ru/air/, в обработчик forair.php.

Теперь стоит отметить важное! перед вашим RewriteRule поставьте такой код:

Этот код позволит вам избежать направления на обработчик при запросе статических папок и файлов, физически хранящихся в папке сайта.

Ещё очень важная особенность ЧПУ, которая не была освещена это ссылки в HTML коде вашего сайта к стилям, картинка и пр. Дело в том что относительный путь к картинкам и файлам, которые вы подключаете на странице нужно составлять с учётом ЧПУ, так как каждый слэш (/) в адресе будет расцениваться как папка. В итоге относительные пути ЧПУ будут вида "../../". Рекомендуем вам почитать статьи о относительных адресах, если вы не знаете как составлять их иерархию в HTML. Если же вы не хотите заморачиться на этом или не понимаете о чём речь, просто выставьте везде абсолютные пути, т.е для картинок вместо:

В таком случае данные сайта будут вызываться корректно при любом ЧПУ, с любым количеством слешей. Точно также поступите со всеми подключаемыми файлами к HTML.

Настало самое время поговорить о втором варианте редиректа через .htaccess. Второй вариант полностью завязан на первом, но представляет собой универсальный редирект со стороны htaccess. Состоит редирект всего из одного правила:

RewriteRule ^([A-Za-z0-9-/]+)$ /engine.php?query=$1 [L]

Вся логика такого редиректа в том, что абсолютно всё после http://site.com/ будет отсылаться на обработчик engine.php в переменной $_GET[‘query’]. Далее мы в engine.php можем разбить переменную на части:

И теперь мы получили массив $url в каждой ячейке которого содержиться часть полного пути. Например, если наш адрес (переменная query) выглядит так: transport/auto/ferrary/laferrary/description, тогда после обработки будет:

И вы после обработки можете выполнять любые действия с этими данными.

И возможно пригодится: Для того чтобы узнать количество записей в массиве используйте count($url), для того чтобы посмотреть значение последней записи в массиве используйте end($url).

Здравствуйте дорогие гости и постоянные читатели блога о создании сайтов – Site on! В одной из предыдущих статей этого раздела я обещал вам рассказать, как всего за пару минут можно создать собственные ЧПУ ссылки. Несмотря на то, что статья может показаться вам объёмной, а для некоторых и сложной – я надеюсь, когда дочитаете её до конца, вы согласитесь, что в создании ЧПУ действительно нет ничего сверхъестественного.

Что такое ЧПУ?

ЧПУ – это исковерканная англоязычная аббревиатура SEF URL (search engines friendly url). Она обозначает адреса ссылок, которые дружелюбны для поисковых систем. О ЧПУ я также писал в статье про внутреннюю оптимизацию сайта. В русскоязычном варианте SEF URL пишется как ЧПУ – человеко-понятные url. Что всё это значит? Это значит, что адреса ваших ссылок будут иметь осознанный текст, а не технический мусор, за примером можете сходить по ссылке выше.

Какие преимущества дают SEF URL?

Во-первых, очевидно, что ЧПУ ссылки уже в самом своём адресе могут содержать полезную для пользователя информацию. Из такого адреса сразу понятно, о чём будет статья или страница в целом.

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

Читайте также:  Структурированная ссылка в excel

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

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

И последнее: ЧПУ – как средство навигации. Если ссылка понятна пользователю, то он сам может переходить по разделам сайта, просто редактируя ваш URL. Например:

Если удалить из данной ссылки её последнюю часть (2-sublime-text-2), то мы попадём в раздел, к которому относится данная статья:

В данном случае это раздел «Инструменты». То есть благодаря SEF ссылкам мы можем построить понятную людям и роботам иерархию нашего сайта, что опять-таки будет полезно и для посетителей и для продвижения в поисковых системах.

Недостатки ЧПУ ссылок

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

Второе: ваш сайт станет дольше грузится, а именно, на пару десятитысячных секунды 🙂 Это связано с тем, что для работы ЧПУ подключается специальный модуль веб-сервера Apache – mod_rewrite, которому понадобится это «огромное» количество времени на обработку ссылок.

Когда ЧПУ не нужны?

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

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

Что ещё нужно знать о ЧПУ?

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

Но что если мы имеем дело с сайтом на чистом PHP, без CMS, или же хотим разработать свою собственную CMS в которой хотим сделать SEF URL? Для подобных случаев, а также для людей, которые хотят углубиться и понять всю суть преобразований обычной ссылки в ЧПУ, я и написал остальную часть статьи. Если вы читали мои предыдущие статьи, то знаете, что мой блог как раз относится к этой категории, то есть сайтам, написанным с нуля на PHP, без использования готовых CMS.

Ах да, ещё один момент: из личного опыта не советую делать кириллических URL.

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

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

Суть в том, чтобы из красивого и понятного человеку URL (ЧПУ) сделать на лету URL, который будет полезен разработчику PHP (не ЧПУ):

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

Создание SEF ссылок с помощью mod_rewrite

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

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

Для корректной работы mod_rewrite в нём обязательно должна быть написана следующая строка:

Далее подключаем наш модуль rewrite к конкретной папке, то есть к папке, в которой лежит наш .htaccess:

Имеем следующий файл .htaccess:

Правила и условия mod_rewrite

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

Где ^useful/([a-z]*) – это шаблон ожидаемого url,

а /index.php?category=useful&article=$1 – это то, во что мы его конвертируем, если пришедший URL подошёл под шаблон.

При этом $1 равен тому, что написано в круглых скобках, то есть $1 = [a-z]* Если бы круглые скобки встречались 2 раза, то у нас были бы переменная $1 и $2, если круглые скобки встречаются 3 раза, то переменные $1, $2, $3 и так далее. При этом переменные создаются в том же порядке, как идут круглые скобочки.

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

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

То есть на данном этапе вам важно понять саму суть: в ЧПУ ссылках не передаются параметры, а без параметров мы не можем ничего сделать в PHP с этой ссылкой, поэтому с помощью mod_rewrite мы преобразуем ЧПУ ссылку без параметров в не ЧПУ ссылку с параметрами. Что такое параметры? В примере выше имеем 2 параметра:

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

Опять-таки обращаю ваше внимание, что про параметры вы уже должны были знать, я лишь вкратце вам напомнил.

В шаблонах мы можем использовать символы и символьные классы. Символ точки обозначает абсолютно любой символ.

  • . – любой одиночный символ
  • [redf] – это класс символов. Обозначает наличие одного из перечисленных символов с учётом регистра.
  • [a-z] – класс символов. Обозначает наличие одного из символов в промежутки от 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 – конкретное число.
  • — должно быть ровно 4 символа из предшествующего текста.
  • — 4 или 5 символов
  • — от нуля до 6 символов
  • — от 4 до бесконечности символов
Читайте также:  Что лучше ринза или парацетамол

Примером может послужить наша уже известная строчка:

В которой мы применили квантификатор (квантор) звёздочку (*) после класса символов [a-z]. Это значит, что в нашем URL после useful/ могут находиться символы от a до z в любом количестве и, естественно, в любой последовательности, а могут и не быть вовсе. Домен в счёт не берём, он подразумевается сам по себе.

Экранирование

Также при составлении шаблона не стоит забывать и про экранирование. Если вы хотите заключить в класс символов, например, символ точки, то вам нужно её заэкранировать, так как без экранирования точка (служебный символ) обозначает абсолютно любой символ:

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

Ограничение начала и конца строки (маркеры)

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

  • ^ – начало URL
  • $ – конец URL

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

Обращаю ваше внимание на то, что знак ^ внутри квадратных скобок обозначает отрицание, не путайте!

Обратные связи в mod_rewrite

$n – это наша «переменная» в круглых скобках, о них мы уже говорили. Работает для RewriteRule.

%n – то же самое, только в RewriteCond. RewriteCond мы ещё не рассматривали, он у нас впереди.

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

У сервера есть свои собственные переменные, которые мы можем использовать в наших условиях RewriteCond:

Синтаксис применения серверных переменных таков:

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

Если посетитель зашёл с браузера Mozilla Firefox, то выполняем следующее правило. Как видите, в отличие от PHP мы не используем фигурные скобки для обрамления нашего правила, которое выполнится, если условие TRUE.

RewriteCond позволяет использовать операторы сравнения: (больше), = (равно). Также есть специальные значения, например:

  • -d (является ли каталогом)
  • -f (является ли файлом)
  • -s (является ли файлом с ненулевым размером)
  • ! – отрицание.

Флаги

  • nocase|NC – можно писать либо nocase, либо NC, это одно и то же, обозначает регистро-независмость. То есть мы можем больше не писать:

Вместо этого написать так:

  • ornext|OR – если это, либо следующее условие TRUE, то выполняем RewriteRule. Пример:
  • Last|L – последнее правило. Если правило применилось, то правила, расположенные ниже по коду, не сработают.
  • next|N – некий аналог continue. Если правило применилось, заставляет отыгрывать все правила с самого начала, но при этом с уже преобразованной строкой.
  • redirect|R – редирект. По умолчанию 302. Можно указать другой код редиректа, например:
  • forb > Если нужно поставить одновременно несколько флагов, ставим их через запятую, например:

    Как вы уже могли догадаться, mod_rewrite можно использовать не только для ЧПУ, но и для многих других интересный целей, например, клоакинга – это метод чёрного SEO, когда по одному и тому же адресу посетителям отдаётся одна страница, а поисковым роботам совершенно другая. Ну и под конец статьи, я покажу вам живой пример использования всего написанного выше и как же это всё работает взаимодействуя с нашим PHP.

    Живой пример использования mod_rewrite

    Итак, вот какой вид имеет мой файл .htaccess:

    Что происходит в этом ужасе? Для начала я проверяю, не набрал ли человек старой закалки мой адрес с www, если набрал, то перенаправляю его на тот же адрес, только без www. Зачем именно это нужно я напишу в одной из следующих статей, если коротко, то для SEO. После перенаправления с www на без www у нас заново считался наш файл .htaccess, поэтому всё начинается снова: проверяем, не пришёл ли нам УРЛ с www, в этот раз – нет. Далее (второй RewriteCond) мы проверяем, если наш УРЛ действительно без www, то делаем преобразования, а именно: заносим весь URL (без имени домена) в параметр article.

    На этом работа .htaccess завершена и на сцену выходит PHP. Следующий код размещён в index.php:

    О том, как работает конструкция switch, я подробно писал в статье по указанной ссылке. Вот и всё, дамы и господа! Наконец-то наша статья подошла к логическому завершению, и теперь вы сможете попрактиковать полученные знания. Я прощаюсь с вами до выхода новой статьи, а напоследок хочу привести интересную цитату:

    «Несмотря на тонны примеров и документацию, mod_rewrite это Вуду. Чертовски клёвый Вуду, но все-таки Вуду.»

    Всем доброго времени суток! Вернулся я из отпуска, надеюсь, что Вы тоже хорошо отдохнули, и с новыми силами возьмётесь за работу. И первой статьёй я решил затронуть очень популярную тему – создание ЧПУ-ссылок. Их также иногда ещё называют SEF-ссылки (благодаря Joomla). В английской литературе они называются Friedly URL. Эти 3 термина означают только одно: замена длинных и непонятных ссылок на простые и понятные человеку. И как сделать ЧПУ-ссылки, я расскажу в этой статье.

    Чтобы мы говорили об одном и том же, давайте окончательно определимся с понятием ЧПУ-ссылки. Возьмём для примера мой сайт. Посмотрите сейчас в адресную строку. Вы там увидите следующее: http://myrusakov.ru/php-furl.html. Таким образом, можно подумать, что сайт состоит из простого набора HTML-страниц, что, безусловно, не так. В реальности ссылка выглядит так: http://myrusakov.ru/?view=article& >

    Теперь же перейдём к реализации. Здесь всё достаточно сложно, поэтому если Вы не обладаете соответствующими знаниями, то лучше пропустите данную статью, и вернитесь к ней позднее. Само преобразование состоит из двух этапов:

    • Замена на странице всех ссылок на ЧПУ-ссылки.
    • Обработка ЧПУ-ссылки, по которой переходит пользователь.

    Первый этап весьма сложный. Здесь надо вытащить все ссылки на загружаемой странице (самый простой способ – через регулярные выражения), и заменить значение атрибута href на нужный адрес. Например, вот такую ссылку: http://myrusakov.ru/?view=article& >

    Второй этап не легче первого. Сначала нужно добавить в файл .htaccess следующие строчки:

    В данных строках происходит следующее: если пользователь делает запрос к несуществующему файлу или к несуществующему каталогу, то этот запрос передаётся к главной странице сайта (index.php), в которой он уже дальше будет обрабатываться. Например, Вы пишите в адресной строке: http://myrusakov.ru/php-furl.html. Такого файла не существует, поэтому этот запрос передаётся в файл index.php.

    В файле index.php этот запрос должен обработаться, и должно произойти обратное преобразование из ЧПУ-ссылки в обычную ссылку. А уже с обычной ссылкой, Вы легко справитесь. Аналогично с прямым преобразованием (из обычной ссылки в ЧПУ) обратное преобразование также уникально для каждого движка.

    Читайте также:  Что такое unicode и каковы его перспективы

    Как можно понять из прочитанного, вся сложность состоит в преобразованиях, а сам общий алгоритм очень простой.

    И, напоследок, хочу затронуть плюсы и минусы ЧПУ-ссылок. Начнём с плюсов:

    • Лучшая оптимизация под поисковые системы. Не секрет, что такие ЧПУ-ссылки значительно больше ценятся, чем обычные. Также если в самой ссылке есть ключевое слово, ведённое пользователем в поиске, то оно будет выделено. Поэтому помимо лучшего отношения поисковых систем, повышается конверсия переходов по Вашему сайту в поисковой выдаче.
    • Человеку гораздо проще запомнить ЧПУ-ссылку, нежели обычную.

    Серьёзных минусов я могу выделить только два:

    • Увеличение нагрузки на сервер. Следствием является также более долгая загрузка страниц. Я могу по своему опыту сказать, что если Вы всё сделаете качественно, то увеличение произойдёт примерно на 25-30% (именно так у меня). Но если вдруг преобразования очень сложные, а ссылок, нуждающихся в преобразовании, на странице очень много, то возможно увеличение вплоть до 100% (безусловно, может быть и больше, но это уже исключения из правил).
    • Сложная реализация. Если Вы это делаете в первый раз, то даже при совсем простых преобразованиях, несколько часов времени точно убьёте.

    И, наконец, хочу отметить, что вариантов создания ЧПУ-ссылок существует далеко не один. Если преобразования совсем простые, то достаточно использовать лишь файл .htaccess, разумеется, написав там соответствующий код. В этой же статье я показал Вам, на мой взгляд, самый простой способ создания ЧПУ-ссылок, которым я сам уже много раз пользовался.

    В общем, подумайте, нужны ли Вам ЧПУ-ссылки, и если нужны, то делайте. Уверяю Вас: во вред это точно не будет.

    Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 84 ):

    Добрый вечер Михаил, при создании сайта я столкнулся с проблемой создания ЧПУ ссылок, только не понимаю, как обработать ссылки в index странице, не могли бы вы создать урок по этой теме, для многих бы вопрос был бы закрыт. Спасибо вам за ваши труды.

    Обработка в самом простом случае такая: if ($_SERVER["REQUEST_URI"] == "myarticle.html") < //Выводим статью myarticle.html >Вот и вся обработка. А уже сама обработка будет меняться у каждого, в зависимости от того, где хранятся соответствия и как к ним обращаются.

    Михаил спасибо, разобрался, извини за глупый вопрос :)))

    Есть способ легче! В файл .htaccess добавляем ErrorDocument 404 /404.php А уже в 404.php пишем ($_SERVER["REQUEST_URI"] == "myarticle.html"). Мне кажется, так лучше!

    А где можно подробнее почитать о первом этапе, а именно о том, как такую ссылку: http://myrusakov.ru/?view=article& >

    Ключевым моментом здесь является использование регулярных выражений.

    Вы затронули тему о снижении скорости загрузки страниц. А существуют ли какие-нибудь сервисы или приложения, которые позволяют тестировать время выполнения скриптов. Добустим у меня была одна функция для поиска по базе данных, я решил написать другую. На глаз прироста/потери в скорости невидно, как можно сравнить скорость их выполнения?

    Спасибо, очень поможет. Есть еще два вопроса по теме. 1.А какое время генерации страницы считается нормальным? 2.Создал .htaccess в директории с сайтом него прописал нужные строки, однако если в адресно строке набрать что-то несуществующее, например http://tuner/fff/ggg(tuner-имя "сервера") то вылазеет сообщение денвера о том что страница не найдена.

    1. Зависит от страницы и от сервера. У меня время генерации 16-24 мс. 2. Попробуйте http://tuner/fff Если не получится, то либо index-файла нет, либо что-то всё-таки не так сделали.

    Попробывал не выходит. index файл есть, в .htaccess добавил только строчки которые у вас в статье предоставлены. Может в настройках денвера поменять что то надо?

    Попробуйте добавить ещё это: RewriteEngine On

    Михаил, можете подсказать, что нужно написать в .htaccess для того чтоб преобразовать /test/index.php? >

    Через rewriterule делается: RewriteRule ^test/([0-9]+)/$ test.php? >

    спасибо, помогло) Если кому-нибудь такой пример понадобится, в частности вариант с /test/ ]; echo $id; // будет 777

    С папками намного проще работать, а вот обрезать пасширения файлов и менять их на другие или сделать из categories.php? >

    Добавил строчки в .htaccess Options +FollowSymlinks RewriteCond % !-d RewriteCond % !-f RewriteRule ^(.*) /?% Но сервер выдаёт ошибку о несуществующем файле. Если я правильно понял перенаправления на index.php не происходит

    Сработала конструкция RewriteEngine on RewriteBase / RewriteCond % !-f RewriteCond % !-d RewriteRule ^(.*)$ index.php/$1 Но при этом не подключаются ни стили, ни яваскрипты подключение которых прописано в index.php

    Вопрос снят прописал абсолютные пути на эти файлы всё заработало

    А как сделать ссылку вида http://www.kak-sozdat-sait.16mb.com/category.html?cat=$menu[ Что мне делать? Помогите пожалуйста

    Ну пожалуйста помогите, если брать обычную ссылку то она такая http://www.kak-sozdat-sait.16mb.com/category.php?cat=1 , а в файле htaccess у меня прописано RewriteRule ^category/([0-9]+)/$ category.php?cat=$1 и должно получиться типа http://www.kak-sozdat-sait.16mb.com/category/1/ но пишет ошибку типа такого файла не существует, помогите пожалуйста

    Код правильный, всё должно работать. Либо файл не существует, либо в сервере какая-то проблема.

    Я так понял, что все запросы будет обрабатывать один скрипт – index.php (ну или другой в зависимости от конфигурации). Возникает вопрос, а не возникнет ли перегрузки сервера? Или интерпретатору без разницы, один файл обрабатывать или несколько?

    Ну а длина кода? Ведь используются десятки условий с вложенными условиями, плюс функции плюс подключаемые файлы. Ведь чем код короче, тем быстрее он обрабатывается. Конечно при помощи функций он сокращается, но возникают переходы туда – обратно.

    Если всё грамотно делать, то никаких вложенных условий не появляется. Как делаю я, показано в данном курсе: http://srs.myrusakov.ru/php

    Страничная навигация все-равно будет с условиями. Почему-то не получается вынести в функцию. Ну да не об этом. После оптимизации получил время генерации страницы от 0.008 до 0.12 на денвере. Мне пока хватит. Вопрос по обработке. При переходе по ссылке, я обрабатываю адрес строковыми функциями, это верное направление мысли или есть способы попроще и функциональнее?

    Что ещё за переход по ссылке? Зачем его обрабатывать?

    К примеру при переходе по ссылк site.ru/user в индекс-файле я в условии при помощи функций strstr(); strpos(); обрабатываю строк адреса, если после слеша находится всего одно слово откидываю слеш и по базе ищу пользователя с указанным именем (естественно уникальным). Нужный результат достигнут, но обработка ссылки при помощи строковых функций меня смущает. Правильно ли это или есть способ попроще?

    Анализировать надо $_SERVER["REQUEST_URI"]; А от слэшей надо избавляться через htaccess, о чём напишу в пятницу.

    Так я ее и анализирую. If(strpos($_SERVER[‘REQUEST_URI’], "/") === strstr($_SERVER[‘REQUEST_URI’], "/"))<.

    Оцените статью
    Добавить комментарий

    Adblock
    detector