Как сделать ЧПУ-ссылки
Всем доброго времени суток! Вернулся я из отпуска, надеюсь, что Вы тоже хорошо отдохнули, и с новыми силами возьмётесь за работу. И первой статьёй я решил затронуть очень популярную тему - создание ЧПУ-ссылок. Их также иногда ещё называют 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, разумеется, написав там соответствующий код. В этой же статье я показал Вам, на мой взгляд, самый простой способ создания ЧПУ-ссылок, которым я сам уже много раз пользовался.
В общем, подумайте, нужны ли Вам ЧПУ-ссылки, и если нужны, то делайте. Уверяю Вас: во вред это точно не будет.
-
- Михаил Русаков
Комментарии (85):
Добрый вечер Михаил, при создании сайта я столкнулся с проблемой создания ЧПУ ссылок, только не понимаю, как обработать ссылки в 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&id=271 заменить на http://myrusakov.ru/php-furl.html
Ответить
Ключевым моментом здесь является использование регулярных выражений.
Ответить
Вы затронули тему о снижении скорости загрузки страниц. А существуют ли какие-нибудь сервисы или приложения, которые позволяют тестировать время выполнения скриптов. Добустим у меня была одна функция для поиска по базе данных, я решил написать другую. На глаз прироста/потери в скорости невидно, как можно сравнить скорость их выполнения?
Ответить
http://myrusakov.ru/php-execution-time.html
Ответить
Спасибо, очень поможет. Есть еще два вопроса по теме. 1.А какое время генерации страницы считается нормальным? 2.Создал .htaccess в директории с сайтом него прописал нужные строки, однако если в адресно строке набрать что-то несуществующее, например http://tuner/fff/ggg(tuner-имя "сервера") то вылазеет сообщение денвера о том что страница не найдена.
Ответить
1. Зависит от страницы и от сервера. У меня время генерации 16-24 мс. 2. Попробуйте http://tuner/fff Если не получится, то либо index-файла нет, либо что-то всё-таки не так сделали.
Ответить
Попробывал не выходит. index файл есть, в .htaccess добавил только строчки которые у вас в статье предоставлены. Может в настройках денвера поменять что то надо?
Ответить
Попробуйте добавить ещё это: RewriteEngine On
Ответить
Михаил, можете подсказать, что нужно написать в .htaccess для того чтоб преобразовать /test/index.php?id=777 в адресную строку вида /test/id777 или /test/777
Ответить
Через rewriterule делается: RewriteRule ^test/([0-9]+)/$ test.php?id=$1
Ответить
спасибо, помогло) Если кому-нибудь такой пример понадобится, в частности вариант с /test/id777, то в скрипте /test/index.php ловите переменную через $_GET. $id =(int)$_GET['id']; echo $id; // будет 777
Ответить
С папками намного проще работать, а вот обрезать пасширения файлов и менять их на другие или сделать из categories.php?id=3 в categories/3.html или post.php?id=3 в 3.html примеры выще очень сложны
Ответить
Здравствуйте! Помогите понять как преобразовать вот такую ссылку /category/kosmos/index.php?id=1 вот в такую /category/kosmos/1 /category/kosmos/index.php?id=2 = /category/kosmos/2 /category/kosmos/index.php?id=3 = /category/kosmos/3 и так далее... Что-то я смотрю, читаю, а понять не могу. Спасибо!
Ответить
Добавил строчки в .htaccess Options +FollowSymlinks RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*) /?%{QUERY_STRING} Но сервер выдаёт ошибку о несуществующем файле. Если я правильно понял перенаправления на index.php не происходит
Ответить
Сработала конструкция RewriteEngine on RewriteBase / RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 Но при этом не подключаются ни стили, ни яваскрипты подключение которых прописано в index.php
Ответить
Вопрос снят прописал абсолютные пути на эти файлы всё заработало
Ответить
А как сделать ссылку вида 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, [email protected] 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." Что мне делать? Помогите пожалуйста
Ответить
Ну пожалуйста помогите, если брать обычную ссылку то она такая 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'], "/")){...
Ответить
Еще просьба, можно в новой статье осветить так же конфигурацию файла htaccess при создании чпу. Как составить выражения чтобы при разных видах урла передавать задачи разным скриптам.
Ответить
Михаил. Сегодня после прочтения одной книги нашел одну навязчивую ошибку при обработке ссылки, а именно если перейти по ссылке вида http://mysite.ru/test/<script>alert(document.cookie);</script> выскакивает окно с записями печенек. На этом сайте такого не происходит. Через регулярные выражения бесполезно, как победить эту ошибку?
Ответить
Проверять, существует ли такая страница. Очевидно такой страницы нет.
Ответить
В этом и ошибка. Сначала срабатывает alert(); а после нажатия кнопки OK, происходит редирект на страницу 404.
Ответить
Нет, наоборот, сначала идёт редирект, а потом alert(). И если всё проверяется, то никакого alert() не возникнет. Только что на денвере убрал у себя проверку, и тут же сработал alert().
Ответить
А можно поинтересоваться, как именно проводить проверку? Я в индекс файле пробовал искать так: $url = preg_replace("'<>'", "", $_SERVER['REQUEST_URI']); и так: if(substr_pos($_SERVER['REQUES_URI'], "<") > 0){header(...)} И еще парой способов, где моя ошибка?
Ответить
Проверка проводится по конкретным ЧПУ. Все неизвестные ЧПУ - это 404. То есть я беру ЧПУ, смотрю, что я должен вывести для данной страницы. Если такого ЧПУ вообще не существует на сайте, то просто делаю редирект на страницу 404.
Ответить
Теперь возвращаемся к нашим баранам, то бишь к моему первому вопросу. index.php у меня начинается строчками <?php $url = (string)(rawurldecode($_SERVER['REQUEST_URI'])); и пошли условия которые рассматривают адрес как строку. И ссылки как таковые я не обрабатываю. То есть у меня URL выглядит сайт.рф/форум/новые/тема№17/страница№5 и обрабатываются строковыми функциями.
Ответить
И если ни одно условие не обработалось - идет редирект на страницу 404 или же при ошибках на 502.(личная инициатива) Наверно продолжу в форуме, а то эта страница долго грузится.
Ответить
Усе, ценой двух суток без сна, я победил! Спасибо за участие, сенсей.
Ответить
Здравствуйте.Уже сутки пытаюсь сделать ЧПУ ,а ничего не получается,весь инет облазил,понял что к чему но не хочет оно заменяться ни как,изменения не происходят.Может дело в денвере?или я всеже что то не так делаю. Например Удаляем расширение .php с конца адреса страницы. RewriteRule ^(([^/]+/)*[^.]+)$ /.php [L] Но после этого у меня ничего не изменилось. Так же. http://site.com/articles.php?id=90 Я хочу сделать так: http://site.com/articles/90 Для этого пишу так RewriteRule ^([0-9]+)/$ articles.php?id=$1 Но ни чего не изменятся,уже все перепробовал. Может где то какие то файлы нужно дополнительные создавать или еще что то,не пойму,так как не один пример с инета который я пробовал, не работает.
Ответить
Возможно, RewriteEngine не включили.
Ответить
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?
Ответить
index.php не надо трогать, а вот код какой-то странный. Вот этот используйте RewriteRule ^(\w+)$ $1.php [NC] После этого можно будет писать index и запрос будет отправляться index.php. Разумеется, все ссылки, где фигурирует index.php надо заменить на index. Другие ссылки аналогично.
Ответить
Здравствуйте Михаил.И так я вроде понял свои ошибки,переделал все, и у меня теперь получилось так http://sait.ru/view.php?id_cat=1. И по идее после этого RewriteRule ^view/([0-9]+)/$ view.php?cat=$1 Должно все работать,а оно всеравно не работает
Ответить
А как Вы определяете, что не работает? URL меняться и не должен, а в view.php теперь есть $_GET["cat"];
Ответить
Да есть. вернее у меня не 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 и тд. я так понимаю из за этого загрузка страниц будет медленее?
Ответить
Загрузка от этого будет не будет медленной.
Ответить
Все разобрался вроде.Но у меня к примеру под id_cat=1 категория "строительство" а под id_cat=2 "ремонт". Так вот ссылки отображаются правильно site.ru/remont и т.д. но при переходе по ним у меня выводится постоянно сатьи по первой категории т.е. "строительство",хотя в адресной строке отображается "remont". и должны быть выведены статьи по данной категории.
Ответить
Проверьте значение $_SERVER["REQUEST_URI"] там должно содержаться именно "/remont". Вот на основании этого значения и выводите соответствующую страницу.
Ответить
Все обыскал и ничего не понял,где должно быть $_SERVER["REQUEST_URI"],и как его разбирать.
Ответить
http://myrusakov.ru/php-var-server.html
Ответить
Все нашел ошибку.она вообще была в другом месте.щас буду исправлять.А так вроде заработало.Спасибо вам.
Ответить
Только у меня теперь выводяться статьи из 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 то выводит только по трем категориям из семи.И тут я опять понять немогу что ему нужно.
Ответить
это в 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); ?> Чего тут надо сделать чтоб оно нормально работало?А то я уже незнаю что ему надо.
Ответить
Не знаю, по данному коду невозможно ничего сказать. Ищите ошибку по этому методу: http://myrusakov.ru/php-finderror.html
Ответить
Что то я так понял что ничего не понял. В общем у меня получилось site.ru/remont.html?id_cat=1 А как убрать ?id_cat=1 и оставить только remont.html не пойму
Ответить
Михаил, подскажи, пожалуйста, как просто убрать ".php" из строки браузера??? Чтоб ссылки были такого вида: http://mysite.ru/authors или http://mysite.ru/contacts или так http://mysite.ru/authors?id=100 ??? А то все эти ЧПУ ваши не понятно пока что простому чайнику. :))) Мне бы хотя бы просто убрать .php для начала.
Ответить
Никак не убрать, если не знаете PHP. Это ровно так же сложно, как и все остальные манипуляции с URL.
Ответить
Добрый день, Михаил! Не могли бы вы подсказать почему может происходить вот так. Карточки товары в некоторых категориях не открываются после включения ЧПУ на движке prestashop. Для примера в этой категории не открывается ни одна карточка http://wizzyshop.ru/17-1-10-elektro. Буду признателен за ваш ответ.
Ответить
К счастью, давно не работаю ни с какими движками, поэтому ничем тут помочь не могу: http://myrusakov.ru/php-engine-vs-null.html
Ответить
Я думал что это не от движка зависит. Жаль, но все равно спасибо!!!
Ответить
При создании .htaccess и написания RewriteEngine on возникает ошибка 500, из-за чего это может быть?
Ответить
Какая-то ошибка в файле .htaccess значит.
Ответить
Добрый день Михаил! Подскажите как переделать такую ссылку уже все перепробовал ничего не работает http://www.test1.ru/index.php?view=index либо ошибка 505 или ничего не происходит, что надо прописать в .htaccess и в коде?
Ответить
Здравствуйте! У меня вопрос...я занимаюсь продвижением сайта, и там не ЧПУ...Сайту уже где то 2 года, и на него имеется определенное количество бэклинков..Если я поменяю урлы на человекопонятные, то выходит что все преобретенные до этого ссылки потеряются???? Очень жду Ваш ответ!
Ответить
Не потеряются, поскольку они ведут на сайт. Однако, не помешает поставить 301 редирект со старых ссылок на новые.
Ответить
Спасибо за ответ..
Ответить
Привет...Вот вроде как все получилось сделать по уроке + с видео етого урока, но я че то не понимаю как ето на практике применить...?
Ответить
Здравствуйте. Все работает, но возникает проблема. При попытке ввода несуществующего каталога или каталога и файла "отваливаются" рисунки и файлы CSS. Примеры: http://kldsk.ru/123/ http://kldsk.ru/123/123.htm Подскажите пути решения проблемы пожалуйста. Где я мог нагреться?
Ответить
Пожалуйста, проверьте в Вашем .htaccess, в каком положении RewriteEngine (On\Off) + если он включен, скиньте его настойки.
Ответить
Вот так: RewriteEngine on Options +FollowSymlinks RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*) /?%{QUERY_STRING}
Ответить
Покажите ваше регулярное выражение и заодно поправьте кодировку.
Ответить
Это все, что в файле. Что то еще должно быть?
Ответить
Да, внимательно прочтите статью еще раз.
Ответить
Видимо меня немного неправильно поняли. Происходит сбой при ссылке на несуществующий каталог. Запрос возвращается в файл index.php но "отваливаются" при этом css файлы и картинки. Ссылки на несуществующие файлы отрабатываются корректно.
Ответить
Реализуйте для начала первый этап полностью и правильно, затем приступайте ко второму. Первый этап: "Первый этап весьма сложный. Здесь надо вытащить все ссылки на загружаемой странице (самый простой способ - через регулярные выражения), и заменить значение атрибута href на нужный адрес. Например, вот такую ссылку: http://myrusakov.ru/?view=article&id=271 заменить на http://myrusakov.ru/php-furl.html. Здесь Вы должны понимать, что этот процесс замены уникальный для каждого сайта. Например, у меня все эти ЧПУ хранятся в базе. Поэтому я заранее для любого адреса могу построить ЧПУ-ссылку. Аналогично советую сделать и Вам."
Ответить
Все! Работает! В заголовке не хватало этой строчки. <base href="/" /> Приношу извинения за напрасно доставленные хлопоты.
Ответить
А что делать, если страницы в гугл уже проиндексированы со старым названием URL?
Ответить
Здравствуйте, спасибо за статью все работает но у меня такая проблема сайт находится на (локалхост/мойсайт/индекс) а при вводе в чпу он переводит меня на (локалхост/индекс) так вот можно ли использовать в место RewriteRule ^(.*) /?%{QUERY_STRING} это RewriteRule ^(.*)$ index.php [L,QSA]?
Ответить
Михаил, Здравствуйте! Прошел ваш видеокурс по 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 у меня более новая. Пожалуйста помогите с решением данного вопроса. И да, я предположил что я что то напутал при создании , но я поставил ваш блог на сервер и ошибка повторилась в точности. Заранее спасибо вам!
Ответить
Проблема решена установкой новой версии MySQL .
Ответить
Михаил, такая ссылка http://localhost/?view=section&id=2 как переделать в такую http://localhost/myengine/view/section/id/2 кстати сайт
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.