Форум русской поддержки Joomla!® CMS
05.12.2016, 12:34:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Как настроить rewrite для Joomla от дублей в nginx?

 (Прочитано 381 раз)
0 Пользователей и 1 Гость смотрят эту тему.
20strannik08
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 52



« : 12.06.2016, 18:09:43 »

Уже всю голову себе переломал, пытаюсь бороться с дублями такого вида:
site.ru/category/document.html(более правильный вариант, все остальное беда...)
site.ru/category/document/
site.ru/category/document

site.ru/index.php/category/document.html
site.ru/index.php/category/document/
site.ru/index.php/category/document

Решил копать в сторону редиректов nginx, и удалось добится редиректа окончания расширения адреса любого отличного от *.html на него самого же, вот таким путем:
Показать текстовый блок

Не знаю на сколько это верное решение...Но я не могу понять как вырезать /index.php/ из url? Может кто подскажет?

На сервере стоит nginx+php-fpm, Joomla 3.5

P.S. В качестве главной стоит joomsopping, canonical чудит и везде указывает адрес на самого себя и даже на дублях, что в самом магазине что в родных пунктах Joomla. От того и встал вопрос решить это редиректами...
Записан
20strannik08
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 52



« Ответ #1 : 12.06.2016, 19:55:30 »

Может кто-нибудь знает решение под апач? Я бы его попробовал переконвертировать под nginx...  Cry
« Последнее редактирование: 12.06.2016, 20:00:11 от 20strannik08 » Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1444


« Ответ #2 : 13.06.2016, 00:59:23 »

Зачем вы засунули редиректы в локацию по умолчанию? Они должны быть выше всех локаций:
Код:
location ~ ^/index\.php/(.*) {
    Return 301 http://site.ru/$1;
}
Записан
20strannik08
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 52



« Ответ #3 : 13.06.2016, 09:36:42 »

Спасибо вам добрый человек)
Сделал вот так...:
Показать текстовый блок

Но теперь получается что если зайти по адресу http://site.ru/index.php/category/document, то получится двойной редирект, сначала он перенаправит на:
http://site.ru/category/document, а потом на:
http://site.ru/category/document.html
В остальных случаях все впорядке...
Можно ли сделать так что бы в данном случае за один редирект выполнялся переход на конечную страницу с расширением *.html, и аналогично если страница изначально была с расширением *.html, то так же на нее саму и направлять?
« Последнее редактирование: 13.06.2016, 09:56:05 от 20strannik08 » Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1444


« Ответ #4 : 13.06.2016, 20:26:33 »

Код:
location ~* ^/index\.php/(.+?)(\.html)?$ {
    Return 301 http://site.ru/$1.html;
}
Записан
pavelrer
Давно я тут
****

Репутация: +4/-0
Offline Offline

Сообщений: 262


« Ответ #5 : 14.06.2016, 12:00:52 »

$httpUrl = ($_SERVER['REQUEST_URI']);
$pos = strpos($httpUrl, 'index');
if ($pos === false)
else { $doc =& JFactory::getDocument();$doc->setMetaData( 'robots', 'noindex, nofollow' );}

я делаю, как-то так для поисковиков срабатывает, если index где-то еще вылезти то то же в индекс поиска не попадет.
(но это если uri с "index" это копии, если это единичный экземпляр то он то же получит noindex, nofollow)
Для меня проще так.

Записан
20strannik08
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 52



« Ответ #6 : 14.06.2016, 20:21:03 »

pavelrer: noindex мне кажется не всегда самая лучшая идея)

Филипп Сорокин: По вашему наставлению, остальные реврайты переделал в том же стиле:
Код:
location ~* ^/index\.php/(.+?)(\.html)?$ {
    return 301 https://magiaelements.ru/$1.html;
}

location ~* ^/([^.\?]*[^/])$ {
    return 301 https://magiaelements.ru/$1.html;
}

location ~* (.+)/$ {
return 301 https://magiaelements.ru/$1.html;
}

В итоге все заработало как надо) Появилась другая проблема...Jcomments установленный на сайте отказывается работать...Нельзя через фронт в форму отправить комментарии, после отправки он уходит в думки...Поэксперементировав пришел к выводу что ему не нравится вот этот редирект:
Код:
location ~* (.+)/$ {
return 301 https://magiaelements.ru/$1.html;
}

Который удаляет слеш на конце url и переводит адрес в *.html. Вот незадача...
« Последнее редактирование: 14.06.2016, 20:26:45 от 20strannik08 » Записан
pavelrer
Давно я тут
****

Репутация: +4/-0
Offline Offline

Сообщений: 262


« Ответ #7 : 14.06.2016, 20:34:04 »

Цитировать
noindex мне кажется не всегда самая лучшая идея)

Ну я как вариант, почему так делаю, у меня VM дык он дули со словом manufacture делает, и их много
на один и тот же товар или категорию. Ну таким методом из индекса отлетает все дубли.

Вот бы кто объяснил откуда так много дублей.
Вот допустим категории есть алиас он нормально url а вот в крошках он хрен знает какой.
вычитал но пока не дошел что в Joomla типа есть функция которая возвращает нормальный url, просто надо допилить крошки.
Дак чтож все модули и компоненты пилить.

Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1444


« Ответ #8 : 14.06.2016, 20:38:21 »

А есть ещё и физические директории: они всегда со слэшем на конце. Вас выручит безопасный if внутри локации:

Код
location ~* ^(?!/component/)(.+?)/+$ {
   if (!-d $request_filename) {
       return 301 https://magiaelements.ru/$1.html;
   }
}
Записан
pavelrer
Давно я тут
****

Репутация: +4/-0
Offline Offline

Сообщений: 262


« Ответ #9 : 14.06.2016, 20:51:14 »

Проникся БЛИН.
Ведь в моем способе допустим робот зашел потратил ресурс и ни че не сделал.
А в вашем, попадет на целевую страницу.

Пошел штудировать, Спасибо за тему.
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1444


« Ответ #10 : 14.06.2016, 20:52:36 »

Проникся БЛИН.
Ведь в моем способе допустим робот зашел потратил ресурс и ни че не сделал.
А в вашем, попадет на целевую страницу.

Пошел штудировать, Спасибо за тему.

Noindex хорошее решение. Вы всё правильно говорите.
Записан
pavelrer
Давно я тут
****

Репутация: +4/-0
Offline Offline

Сообщений: 262


« Ответ #11 : 14.06.2016, 20:54:12 »

 Grin Спасибо, тоды пойду пивка наверну  Grin
Записан
20strannik08
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 52



« Ответ #12 : 14.06.2016, 21:00:41 »

pavelrer: У меня в jomsopping тоже есть дубли по той же аналогии с категориями, я их теперь та кже как с index.php устраняю+ тщательно прописал robots.txt, в остальной ужас дублей не суюсь, т.к. Яндекс более или менее правильно все проиндекцировал + перепроверяю ссылки в индексе)

Филипп Сорокин, спасибо вам еще раз, публикую конечный вариант, вдруг кому пригодится если кто задумает ставить Joomla на nginx), все проблемы решены!

Код:
location ~* ^/index\.php/(.+?)(\.html)?$ {
    return 301 https://magiaelements.ru/$1.html;
}

location ~* ^/([^.\?]*[^/])$ {
    return 301 https://magiaelements.ru/$1.html;
}

location ~* ^(?!/component/)(.+?)/+$ {
    if (!-d $request_filename) {
        return 301 https://magiaelements.ru$1.html;
    }
}

P.S. Надеюсь мой путь не хуже. На счет noindex, мне кажется про robots.txt тут тоже не нужно забывать) Я поздно сподхватился, и есть страницы в индексе по ненужным адресам, вот и хочу все починить как надо с сохранением позиций страниц по запросам.
« Последнее редактирование: 14.06.2016, 21:35:59 от 20strannik08 » Записан
pavelrer
Давно я тут
****

Репутация: +4/-0
Offline Offline

Сообщений: 262


« Ответ #13 : 14.06.2016, 21:17:35 »

Ну и я суды вопросик по своему методу.
В общем мой способ ищет в URL строку, в данном случаи "index"
но если в url до "index" есть знак вопроса или равно то поиск заканчивается и ничего не происходит.
Не супер силен в синтаксисе php, че накопал то написал  Grin

В общем моим методом не могу убить вот эти странички.
http://домен/abb-info?tmpl=component

т.е это странички которые вылетают в модалку, хотелось бы чтою искал
"tmpl" ну и noidex.
как можно поправить мой вариант.
просто в robots.txt все не пропишешь, сил не хватит.

вот еще только обнаружил одна одинокая, http://домен/?search_term_string
тут тоже чертов вопрос

Спасибо
Записан
voland
Профи
********

Репутация: +487/-86
Offline Offline

Пол: Мужской
Сообщений: 8704


любит наш народ всякое гавно...


« Ответ #14 : 14.06.2016, 21:22:20 »

Ничего не понял, тут все еще nginx обсуждается или уже нет?
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1444


« Ответ #15 : 14.06.2016, 21:23:15 »

Ну и я суды вопросик по своему методу.
В общем мой способ ищет в URL строку, в данном случаи "index"
но если в url до "index" есть знак вопроса или равно то поиск заканчивается и ничего не происходит.
Не супер силен в синтаксисе php, че накопал то написал  Grin

В общем моим методом не могу убить вот эти странички.
http://домен/abb-info?tmpl=component

т.е это странички которые вылетают в модалку, хотелось бы чтою искал
"tmpl" ну и noidex.
как можно поправить мой вариант.
просто в robots.txt все не пропишешь, сил не хватит.

вот еще только обнаружил одна одинокая, http://домен/?search_term_string
тут тоже чертов вопрос

Спасибо

Ну и что, не получается проверить GET-параметр?
Код:
if(isset($_GET['tmpl']))
{
   ...
}
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet