<MyRusakov.ru />

PHP и MySQL с Нуля до Гуру

PHP и MySQL с Нуля до Гуру

Данный курс - это более 20-ти часов видеоуроков по изучению PHP и MySQL. Ключевой момент курса - это создание движка для сайта с нуля. Каждая строчка комментируется. Практически для каждого урока имеются упражнения. Причём данные упражнения направлены не только на закрепление материала, но и на реализацию реальных задач, встающих перед Web-разработчиками при создании сайтов. После курса Вы сможете без проблем создавать движки для любых сайтов.

Также почти к каждому уроку идут упражнения для закрепления материала.

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

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Как сделать ЧПУ-ссылки

Как сделать ЧПУ-ссылки

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

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

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

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

Первый этап весьма сложный. Здесь надо вытащить все ссылки на загружаемой странице (самый простой способ - через регулярные выражения), и заменить значение атрибута href на нужный адрес. Например, вот такую ссылку: http://myrusakov.ru/?view=article&id=271 заменить на http://myrusakov.ru/php-furl.html. Здесь Вы должны понимать, что этот процесс замены уникальный для каждого сайта. Например, у меня все эти ЧПУ хранятся в базе. Поэтому я заранее для любого адреса могу построить ЧПУ-ссылку. Аналогично советую сделать и Вам.

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

RewriteEngine on
Options +FollowSymlinks
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*) /?%{QUERY_STRING}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

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

Комментарии (83):

lion337 lion337 14.11.2011 21:26:11

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

Ответить

Admin Admin 14.11.2011 21:35:00

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

Ответить

lion337 lion337 16.11.2011 20:37:15

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

Ответить

ppk-center ppk-center 02.04.2012 14:41:08

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

Ответить

Vlad777Men Vlad777Men 23.06.2012 13:25:19

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

Ответить

Admin Admin 23.06.2012 14:49:00

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

Ответить

ArturPanteleev ArturPanteleev 06.07.2012 20:38:12

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

Ответить

Admin Admin 06.07.2012 21:16:13

http://myrusakov.ru/php-execution-time.html

Ответить

ArturPanteleev ArturPanteleev 06.07.2012 22:01:22

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

Ответить

Admin Admin 06.07.2012 22:06:34

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

Ответить

ArturPanteleev ArturPanteleev 06.07.2012 22:22:44

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

Ответить

Admin Admin 06.07.2012 22:36:06

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

Ответить

neon4077 neon4077 02.09.2012 01:42:58

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

Ответить

Admin Admin 02.09.2012 20:58:48

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

Ответить

neon4077 neon4077 03.09.2012 12:49:57

спасибо, помогло) Если кому-нибудь такой пример понадобится, в частности вариант с /test/id777, то в скрипте /test/index.php ловите переменную через $_GET. $id =(int)$_GET['id']; echo $id; // будет 777

Ответить

malina95 malina95 19.09.2012 22:43:09

С папками намного проще работать, а вот обрезать пасширения файлов и менять их на другие или сделать из categories.php?id=3 в categories/3.html или post.php?id=3 в 3.html примеры выще очень сложны

Ответить

АлександрНик АлександрНик 26.09.2012 11:16:18

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

Ответить

АлександрНик АлександрНик 26.09.2012 11:29:42

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

Ответить

АлександрНик АлександрНик 26.09.2012 13:55:01

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

Ответить

malina95 malina95 27.10.2012 19:45:03

А как сделать ссылку вида http://www.kak-sozdat-sait.16mb.com/category.html?cat=$menu[id] в http://www.kak-sozdat-sait.16mb.com/category/$menu[id].html ? я делал так RewriteEngine on RewriteRule ^category/([0-9]+).html /? category.html?cat=$1 но он выдаёт ошибку вида "Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, admin@main-hosting.eu and inform them of the time the error occurred, and anything you might have done that may have caused the error. More information about this error may be available in the server error log. Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request." Что мне делать? Помогите пожалуйста

Ответить

malina95 malina95 28.10.2012 18:10:47

Ну пожалуйста помогите, если брать обычную ссылку то она такая 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/ но пишет ошибку типа такого файла не существует, помогите пожалуйста

Ответить

Admin Admin 28.10.2012 18:50:25

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

Ответить

ac-40-6.0 ac-40-6.0 09.12.2012 13:58:44

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

Ответить

Admin Admin 09.12.2012 15:44:02

Без разницы.

Ответить

ac-40-6.0 ac-40-6.0 11.12.2012 05:41:42

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

Ответить

Admin Admin 11.12.2012 06:03:49

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

Ответить

ac-40-6.0 ac-40-6.0 19.12.2012 05:58:45

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

Ответить

Admin Admin 19.12.2012 10:40:29

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

Ответить

ac-40-6.0 ac-40-6.0 19.12.2012 11:01:41

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

Ответить

Admin Admin 19.12.2012 11:58:55

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

Ответить

ac-40-6.0 ac-40-6.0 19.12.2012 13:19:01

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

Ответить

ac-40-6.0 ac-40-6.0 19.12.2012 13:24:36

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

Ответить

ac-40-6.0 ac-40-6.0 25.01.2013 03:22:52

Михаил. Сегодня после прочтения одной книги нашел одну навязчивую ошибку при обработке ссылки, а именно если перейти по ссылке вида http://mysite.ru/test/<script>alert(document.cookie);</script> выскакивает окно с записями печенек. На этом сайте такого не происходит. Через регулярные выражения бесполезно, как победить эту ошибку?

Ответить

Admin Admin 25.01.2013 09:53:44

Проверять, существует ли такая страница. Очевидно такой страницы нет.

Ответить

ac-40-6.0 ac-40-6.0 25.01.2013 10:13:59

В этом и ошибка. Сначала срабатывает alert(); а после нажатия кнопки OK, происходит редирект на страницу 404.

Ответить

Admin Admin 25.01.2013 20:32:16

Нет, наоборот, сначала идёт редирект, а потом alert(). И если всё проверяется, то никакого alert() не возникнет. Только что на денвере убрал у себя проверку, и тут же сработал alert().

Ответить

ac-40-6.0 ac-40-6.0 26.01.2013 10:32:37

А можно поинтересоваться, как именно проводить проверку? Я в индекс файле пробовал искать так: $url = preg_replace("'<>'", "", $_SERVER['REQUEST_URI']); и так: if(substr_pos($_SERVER['REQUES_URI'], "<") > 0){header(...)} И еще парой способов, где моя ошибка?

Ответить

Admin Admin 26.01.2013 15:26:30

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

Ответить

ac-40-6.0 ac-40-6.0 26.01.2013 16:22:03

Теперь возвращаемся к нашим баранам, то бишь к моему первому вопросу. index.php у меня начинается строчками <?php $url = (string)(rawurldecode($_SERVER['REQUEST_URI'])); и пошли условия которые рассматривают адрес как строку. И ссылки как таковые я не обрабатываю. То есть у меня URL выглядит сайт.рф/форум/новые/тема№17/страница№5 и обрабатываются строковыми функциями.

Ответить

ac-40-6.0 ac-40-6.0 26.01.2013 16:27:28

И если ни одно условие не обработалось - идет редирект на страницу 404 или же при ошибках на 502.(личная инициатива) Наверно продолжу в форуме, а то эта страница долго грузится.

Ответить

ac-40-6.0 ac-40-6.0 27.01.2013 19:24:34

Усе, ценой двух суток без сна, я победил! Спасибо за участие, сенсей.

Ответить

Dima Dima 09.02.2013 02:39:33

Здравствуйте.Уже сутки пытаюсь сделать ЧПУ ,а ничего не получается,весь инет облазил,понял что к чему но не хочет оно заменяться ни как,изменения не происходят.Может дело в денвере?или я всеже что то не так делаю. Например Удаляем расширение .php с конца адреса страницы. RewriteRule ^(([^/]+/)*[^.]+)$ /.php [L] Но после этого у меня ничего не изменилось. Так же. http://site.com/articles.php?id=90 Я хочу сделать так: http://site.com/articles/90 Для этого пишу так RewriteRule ^([0-9]+)/$ articles.php?id=$1 Но ни чего не изменятся,уже все перепробовал. Может где то какие то файлы нужно дополнительные создавать или еще что то,не пойму,так как не один пример с инета который я пробовал, не работает.

Ответить

Admin Admin 09.02.2013 08:46:56

Возможно, RewriteEngine не включили.

Ответить

Dima Dima 09.02.2013 10:03:47

RewriteEngine on стоит. Я только не понял в php коде страницы нужно что то делать? У Меня на данный момент index.php идет как статическая страница. также список статей выводится на статические страницы. т.е. У меня категория допустим:ремонт,интерьер,и тд. для каждой такой категории своя страница куда они выводятся,возможно это и неправильно,но по другому я не смог сделать,чтоб категории так же выводились на динамическую страницу и на ней были статьи только по соответсвующей категории,если знаете как,подскажите,буду очень благодарен=).А вот уже статьи которые выводятся в цикле на страницу к примеру ремонт,хранятся в бд и выводятся на динамическую страницу.т.е. Получается так site.ru/articles.php?id=103/ А если поместить страницу articles в папку remont.Тогда получается соотвественно site.ru/remont/articles.php?id=103/ Но это наверное не совсем правильно так делать.И тут я опять не совсем понимаю как правильней сделать. А я хотел сделать site.ru/remont/remont-potolkov/ В БД.Я сделал доп.поле url к примеру и в него пишу название- remont-potolkov.html Но как теперь его подставить вместо id=103?

Ответить

Admin Admin 09.02.2013 15:32:35

index.php не надо трогать, а вот код какой-то странный. Вот этот используйте RewriteRule ^(\w+)$ $1.php [NC] После этого можно будет писать index и запрос будет отправляться index.php. Разумеется, все ссылки, где фигурирует index.php надо заменить на index. Другие ссылки аналогично.

Ответить

Dima Dima 11.02.2013 16:02:48

Здравствуйте Михаил.И так я вроде понял свои ошибки,переделал все, и у меня теперь получилось так http://sait.ru/view.php?id_cat=1. И по идее после этого RewriteRule ^view/([0-9]+)/$ view.php?cat=$1 Должно все работать,а оно всеравно не работает

Ответить

Admin Admin 11.02.2013 21:08:33

А как Вы определяете, что не работает? URL меняться и не должен, а в view.php теперь есть $_GET["cat"];

Ответить

Dima Dima 12.02.2013 02:40:52

Да есть. вернее у меня не cat а id_cat. и в view.php - if (isset($_GET['id_cat'])) {$id_cat = $_GET['id_cat']; } В адресной строке ссылка не изменяется. а остается http://sait.ru/view.php?id_cat=1. Еще такой вопрос банальный.Есть ли какой то лимит оптимальный на кол-во полей в БД? Просто у меня в таблице где хранятся статьи их уже более 20.Т.е id,title и тд. я так понимаю из за этого загрузка страниц будет медленее?

Ответить

Admin Admin 12.02.2013 09:18:29

Загрузка от этого будет не будет медленной.

Ответить

Dima Dima 12.02.2013 13:28:54

Все разобрался вроде.Но у меня к примеру под id_cat=1 категория "строительство" а под id_cat=2 "ремонт". Так вот ссылки отображаются правильно site.ru/remont и т.д. но при переходе по ним у меня выводится постоянно сатьи по первой категории т.е. "строительство",хотя в адресной строке отображается "remont". и должны быть выведены статьи по данной категории.

Ответить

Admin Admin 12.02.2013 21:29:25

Проверьте значение $_SERVER["REQUEST_URI"] там должно содержаться именно "/remont". Вот на основании этого значения и выводите соответствующую страницу.

Ответить

Dima Dima 13.02.2013 03:39:24

Все обыскал и ничего не понял,где должно быть $_SERVER["REQUEST_URI"],и как его разбирать.

Ответить

Admin Admin 13.02.2013 10:09:19

http://myrusakov.ru/php-var-server.html

Ответить

Dima Dima 13.02.2013 12:55:54

Все нашел ошибку.она вообще была в другом месте.щас буду исправлять.А так вроде заработало.Спасибо вам.

Ответить

Dima Dima 13.02.2013 14:36:06

Только у меня теперь выводяться статьи из 7 категорий к примеру категори только во 2,3,4,а в остальных пишет что статей нет. if (isset($_GET['id_cat'])) {$id_cat = $_GET['id_cat']; } if (!isset($id_cat)) {$id_cat = 1;} по такому запросу он выводит везде только по 1 категории если меняю if (isset($_GET['cat'])) {$cat = $_GET['cat']; } где cat=interior то выводит только по трем категориям из семи.И тут я опять понять немогу что ему нужно.

Ответить

Dima Dima 13.02.2013 15:33:27

это в index.php <?php $result_articles = $_SERVER["REQUEST_URI"]; $result_articles = mysql_query("SELECT * FROM settings LIMIT 7 ",$db); while ( $row_articles = mysql_fetch_array( $result_articles ) ) { printf ("<li><a href='%s'>%s</a></li>" ,$row_articles2['url'],$row_articles['title']);} ?> </ul> </div> <div id="container"> <ul id="menu"> <?php $result_articles = mysql_query("SELECT * FROM settings LIMIT 7,14 ",$db); while ( $row_articles = mysql_fetch_array( $result_articles ) ) { printf (" <li><a href='%s'>%s</a></li>" ,$row_articles['url'],$row_articles['title']);} ?> а это файл view.php <? if (isset($_GET['cat'])) {$id_cat = $_GET['cat']; } $result_articles = mysql_query("SELECT * FROM settings WHERE id='$cat'",$db); $row_articles = mysql_fetch_array($result_articles); ?> Чего тут надо сделать чтоб оно нормально работало?А то я уже незнаю что ему надо.

Ответить

Admin Admin 13.02.2013 18:05:44

Не знаю, по данному коду невозможно ничего сказать. Ищите ошибку по этому методу: http://myrusakov.ru/php-finderror.html

Ответить

Dima Dima 16.02.2013 14:18:39

Что то я так понял что ничего не понял. В общем у меня получилось site.ru/remont.html?id_cat=1 А как убрать ?id_cat=1 и оставить только remont.html не пойму

Ответить

Silver78 Silver78 17.03.2013 23:27:57

Михаил, подскажи, пожалуйста, как просто убрать ".php" из строки браузера??? Чтоб ссылки были такого вида: http://mysite.ru/authors или http://mysite.ru/contacts или так http://mysite.ru/authors?id=100 ??? А то все эти ЧПУ ваши не понятно пока что простому чайнику. :))) Мне бы хотя бы просто убрать .php для начала.

Ответить

Admin Admin 18.03.2013 10:42:58

Никак не убрать, если не знаете PHP. Это ровно так же сложно, как и все остальные манипуляции с URL.

Ответить

dimzel dimzel 01.05.2013 11:59:24

Добрый день, Михаил! Не могли бы вы подсказать почему может происходить вот так. Карточки товары в некоторых категориях не открываются после включения ЧПУ на движке prestashop. Для примера в этой категории не открывается ни одна карточка http://wizzyshop.ru/17-1-10-elektro. Буду признателен за ваш ответ.

Ответить

Admin Admin 01.05.2013 16:30:52

К счастью, давно не работаю ни с какими движками, поэтому ничем тут помочь не могу: http://myrusakov.ru/php-engine-vs-null.html

Ответить

dimzel dimzel 01.05.2013 17:41:58

Я думал что это не от движка зависит. Жаль, но все равно спасибо!!!

Ответить

razor2211 razor2211 09.05.2013 16:33:27

При создании .htaccess и написания RewriteEngine on возникает ошибка 500, из-за чего это может быть?

Ответить

Admin Admin 09.05.2013 16:35:04

Какая-то ошибка в файле .htaccess значит.

Ответить

sinox sinox 09.07.2013 03:37:35

Добрый день Михаил! Подскажите как переделать такую ссылку уже все перепробовал ничего не работает http://www.test1.ru/index.php?view=index либо ошибка 505 или ничего не происходит, что надо прописать в .htaccess и в коде?

Ответить

dimonsokol dimonsokol 10.07.2013 22:18:52

Здравствуйте! У меня вопрос...я занимаюсь продвижением сайта, и там не ЧПУ...Сайту уже где то 2 года, и на него имеется определенное количество бэклинков..Если я поменяю урлы на человекопонятные, то выходит что все преобретенные до этого ссылки потеряются???? Очень жду Ваш ответ!

Ответить

Admin Admin 10.07.2013 23:19:32

Не потеряются, поскольку они ведут на сайт. Однако, не помешает поставить 301 редирект со старых ссылок на новые.

Ответить

dimonsokol dimonsokol 10.07.2013 23:40:27

Спасибо за ответ..

Ответить

prindyn prindyn 08.11.2013 03:35:28

Привет...Вот вроде как все получилось сделать по уроке + с видео етого урока, но я че то не понимаю как ето на практике применить...?

Ответить

zhel_kon zhel_kon 18.11.2013 17:39:16

Здравствуйте. Все работает, но возникает проблема. При попытке ввода несуществующего каталога или каталога и файла "отваливаются" рисунки и файлы CSS. Примеры: http://kldsk.ru/123/ http://kldsk.ru/123/123.htm Подскажите пути решения проблемы пожалуйста. Где я мог нагреться?

Ответить

tikkiwiki tikkiwiki 18.11.2013 17:46:25

Пожалуйста, проверьте в Вашем .htaccess, в каком положении RewriteEngine (On\Off) + если он включен, скиньте его настойки.

Ответить

zhel_kon zhel_kon 18.11.2013 18:02:30

Вот так: RewriteEngine on Options +FollowSymlinks RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*) /?%{QUERY_STRING}

Ответить

tikkiwiki tikkiwiki 18.11.2013 18:18:21

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

Ответить

zhel_kon zhel_kon 18.11.2013 18:21:27

Это все, что в файле. Что то еще должно быть?

Ответить

tikkiwiki tikkiwiki 18.11.2013 18:22:47

Да, внимательно прочтите статью еще раз.

Ответить

zhel_kon zhel_kon 18.11.2013 18:37:14

Видимо меня немного неправильно поняли. Происходит сбой при ссылке на несуществующий каталог. Запрос возвращается в файл index.php но "отваливаются" при этом css файлы и картинки. Ссылки на несуществующие файлы отрабатываются корректно.

Ответить

tikkiwiki tikkiwiki 18.11.2013 18:45:17

Реализуйте для начала первый этап полностью и правильно, затем приступайте ко второму. Первый этап: "Первый этап весьма сложный. Здесь надо вытащить все ссылки на загружаемой странице (самый простой способ - через регулярные выражения), и заменить значение атрибута href на нужный адрес. Например, вот такую ссылку: http://myrusakov.ru/?view=article&id=271 заменить на http://myrusakov.ru/php-furl.html. Здесь Вы должны понимать, что этот процесс замены уникальный для каждого сайта. Например, у меня все эти ЧПУ хранятся в базе. Поэтому я заранее для любого адреса могу построить ЧПУ-ссылку. Аналогично советую сделать и Вам."

Ответить

zhel_kon zhel_kon 18.11.2013 21:04:14

Все! Работает! В заголовке не хватало этой строчки. <base href="/" /> Приношу извинения за напрасно доставленные хлопоты.

Ответить

shepalex shepalex 12.11.2014 22:11:37

А что делать, если страницы в гугл уже проиндексированы со старым названием URL?

Ответить

krot25 krot25 05.03.2015 17:34:49

Здравствуйте, спасибо за статью все работает но у меня такая проблема сайт находится на (локалхост/мойсайт/индекс) а при вводе в чпу он переводит меня на (локалхост/индекс) так вот можно ли использовать в место RewriteRule ^(.*) /?%{QUERY_STRING} это RewriteRule ^(.*)$ index.php [L,QSA]?

Ответить

Taras1000 Taras1000 04.11.2015 11:48:01

Михаил, Здравствуйте! Прошел ваш видеокурс по YII2 и столкнулся с проблемой которую не могу разрешить самостоятельно. Дело в том , что когда я сделал ЧПУ ссылки на своем сайте фрэймворк выдал ошибку PHP Notice – yii\base\ErrorException Undefined variable: link Если перехожу на главную страницу Ошибкой подсвечивается строчка выборки внутри UrlRule $sef = Sef::find()->where(["link" => $link])->one(); Ну а если перехожу по внутренней ссылке (забитой в Sef) то ошибка выглядит уже так - PHP Notice – yii\base\ErrorException Undefined offset: 1 Подсвечивается строчка: if ($link_data[1]) пробовал менять ее на if (isset($link_data[1])) но ошибки идут дальше. Пожалуйста помогите с этой проблемой, у меня установлен Denwer APACHE, переустанавливал его недавно. Возможно проблема кроется в версии PHP, но я в этом сильно сомневаюсь. У Вас на момент создания курса стояла версия 5.4.42 - у меня стоит 5.4.45, но честно говоря я сомневаюсь что проблема кроется в этом, ведь версия PHP у меня более новая. Пожалуйста помогите с решением данного вопроса. И да, я предположил что я что то напутал при создании , но я поставил ваш блог на сервер и ошибка повторилась в точности. Заранее спасибо вам!

Ответить

Taras1000 Taras1000 05.11.2015 02:02:05

Проблема решена установкой новой версии MySQL .

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.