Вордпресс: не полный урл и 404 ошибка. Пути решения.
Как реализовать на вордпресс средствами самого кода, ну возможно и дополнением, дописывание ошибочных урлов сайта что бы не было 404 ошибки и открывалась нужная страница?
Возможно ли такое?
Для большей наглядности вопроса приведу пример:
Например есть сайт: site.ru
Есть например страница сайта: site.ru/o programmah
Если например пользователь скопировал неполную ссылку: site.ru/o programm, то по логике будет страница отдавать 404 ошибку. Как этого избежать и что бы при этом открылась нужная страница пользователю, то есть страница: site.ru/o programmah
Всем заранее спасибо.
Знаю, подскажу
13
Не знаю, не подскажу
16
Изложу подробно в комментарии к вопросу.
2
Раздел: Программирование, проголосовало: 31, последний комментарий: 16.06.2017 22:56 Вопрос закрыт пользователем Ass238
Да не, мне самому интересно поковыряться.
Может я что то упустил и есть скажем плагин какой то для такого, а может кто то сталкивался с такой задачей и ее решал средствами кода и есть решение. Хотя лучше бы конечно средствами кода.
А если он отпишется и что то посоветует будет хорошо и полезно для многих.
Насколько я помню, в вордпресс уже давно есть такая возможность — redirect canonical.
Если она не подходит, есть куча плагинов: nm404, Ultimate Redirect и т.п.
Я к сожалению не знаком с вордпресс, не приходилось.
Но вот как я вижу с точки зрения JavaScript или php.
Пример сайт http: //www.wmmail.ru/index.php? - назовём это основная страница.
http: //www.wmmail.ru/index.php?cf=otvet-viewvopros&type=&vid=74604 - это страница вопрос-ответ.
Если её обрезать скажем так http: //www.wmmail.ru/index.php?cf=otvet то мы по любом попадём на основную страницу. Ошибка невыскочет. Этот сайт на php и разбирать его не будем. А вот на JavaScript это будет так:
http: // домен сайта разделительный знак ? а после него разные страницы:
http: //mysite?страница1
http: //mysite?страница2
Пользователь вставляет урл http: //mysite?страница1 или http: //mysite?страница2
и попадает на основную страницу с кодом JavaScript.
JavaScript извлекает с урла всё то что после знака ? и перебрасывает посетителя на - страница1 или страница2.
Если урл после разделительного знака ? будет не полным, то JavaScript будет решать что делать дальше. В простом случае посетитель останется на основной странице. Но ошибка всё равно невыскочет.
Код приблизительно такой:
var url = document.location.href
var arr = url.split('?')
arr[0] - это всё до знака ?
arr[1] - это всё после знака ?
Дальше очень приблизительный код просто чтобы было понятно:
document.location.href = document.location.href+arr[0]+'?'+arr[1] - переход на страницу http: //mysite?страница1 или страница2
Ну как то так. Правда я так делать не пробовал, только теоретически. На самом деле тут нужно думать...
Как реализовать:
http: //mysite?страница1
http: //mysite?страница2
Так это понятно что 404 страица должна быть рабочей и ее дизайн дело веб мастера. Можно предложить перейти на 2главную", предложить поиск, предложить посмотреть какие то актуальные новости на сайте - это все понятно.
И это нормально когда страницы вообще такой нет на сайте.
Речь именно о том что страница есть, но юзер скажем не докопировал урл, в итоге он попадет на страницу 404, но ему не интересно читать не то что ему надо или же что то искать что надо.
Нужно что бы при не дописаном урле при переходе по нему он дописывался, разумеется если страница есть, если вообще похожего урла нет, то разумеется 404.
Когда то года 2 - 3 назад я такое реализовывал на другой CMS. Но у вордпресс свои особенности. Полагаю что реализовать можно.
Потому вот и спросил, может кто какую наводку даст или скажем так похожее решение. А допилить уже можно.
Добавлено спустя 04 минуты 27 секунд
Название canonical как мне кажется говорит о том что речь скорее о дубле. Страница по двум и более адресам.
Но это не много не то совсем. Это другая плоскость проблемы.
Посмотрю что за они. Разумеется корень решения вопроса в редиректе, но не только.
Поскольку сама по себе 404 нужна и должна работать, но для несуществующих страниц совсем.
Формально конечно не дописанный урл - это тоже как бы не существующая страница. Но тем не менее немного другое. Именно в таком случае только нужен по сути редирект.
Посмотрю что за плагины. Хотя отдаю предпочтение решению вопроса чистым кодом, ну может при рассмотрении плагинов появятся идеи
Добавлено спустя 05 минут 57 секунд
что то вроде того.
Добавлено спустя 10 минут 04 секунды
Схема хорошая, но я так понимаю тут надо целый комплекс и список урлов для скрипта. В принципе думаю так можно бы сделать конечно, но это когда сайт не большой.
Если страниц тысячи и + то что вордпресс построен так же на PHP решать вопрос надо серверными скриптами.
Посмотрю что там из плагинов подсказали, а так еще посмотрим может кто то еще что то предложит. Ну и сам буду думать.
Да, принцип именно такой. Но тут посложнее будет задача. И как мне кажется JS тут не обойтись.
Гляну что за плагин выше дали, если то что нужно, то его расковырять надо понять как работает и как это все внедрить в СMS редактированием файлов движка.
Завтра с переводчиком почитаю что за она.
Но мне кажется не то.
Я так понимаю функция при наличии дублирующей страницы (если на сайте две и более существующие страницы с разными урл) делает редирект на нужную.
Две и более страницы с одинаковым содержанием не отдающие 404.
А по моей задаче, есть страница 1 и 1 урл.
Но завтра точнее про функцию почитаю.
А я опять о своём.
Забудьте всё что я писал выше, есть новый вариант:
Если у вас есть возможность редактировать страницу ERROR 404 (вставить туда JavaScript) и при открывании этой страницы будет виден урл по которому перешёл посетитель, то можно отследить этот урл, ну и дальше выполнить соответствующие действия.
Практически это будет JavaScript с массивом из всех ссылок с вашего сайта. Правда при создании новой страницы, её нужно будет вводить в этот массив в ручную (менять JavaScript). Или придумать какую то логику в названии страниц, ну это уже из теории искусственный интеллект. Короче я дал идею если страница ERROR 404 работает так как на Юкозе.
Благодарю за идею. Да страница 404 доступна к редактированию. Ну направление и идея хорошая. Во всяком случае я еще размышляю над вопросом.
Что нибудь да решу.
Но разумеется учту все наводки здесь в ВО
Если хочешь написать сам, то...
Когда скрипт не может найти страницу по данному URL он должен взять список aliasURL начинающихся с этого URL. Если результатов нет то выдать стандартную ошибку, если 1 результат - сделать редирект, в противном случае предложить выбор юзеру.
Например, если адрес содержит только название поста то выделяешь из URL обрезанное название и ищешь все похожие записи в таблице постов.
Файл роутинга (или функция), прямо перед выводом ошибки.
А вообще Redirect Canonical именно то что тебе нужно.
Как реализовать на вордпресс средствами самого кода, ну возможно и дополнением, дописывание ошибочных урлов сайта что бы не было 404 ошибки и открывалась нужная страница?
Видел решение в .htaccess независимо от движка. И в вордпресс наверняка можно реализовать скорее всего через регулярные выражения и функцию parse_url, preg_replace или preg_replace_callback_array
А вообще Redirect Canonical именно то что тебе нужно.
Не то редирект этот.
Но проблему почти решил можно сказать, вопрос допиливается.
А каноникал, это же редирект при наличии нескольких страниц с одним содержанием и эти страницы есть. Почти то да не то. Но за оснву хорошо
Добавлено спустя 01 минуту 23 секунды
Видел решение в .htaccess
ранее я реализовывал такое в DLE легко и просто, но там другое ядро и проще. Повторение на вордпресс не дало результатов, отличие ядра играет роль
Но решаемо все
все страницы имеют свой ID материала. Если он не был удалён автором сайта и присутствует в адресах страниц, то всё будет перебрасывать куда надо автоматом.
Пример: полный адрес:
site.ru/вася/пупкин/1289-на-море
1289 это id материала, то даже если написать вот так:
site.ru/1289, будет открыта нужная страница.
По крайней мере у меня так работает на Joomla
Добавлено спустя 06 минут 32 секунды
404 ошибка
а тут я просто сделал редирект на главную страницу, да и все дела