[Решено] Global Redirect и специфические алиасы

Главные вкладки

Аватар пользователя Sun-fire Sun-fire 3 ноября 2010 в 17:10

Собственно, вопрос:

Может ли Global Redirect обрабатывать алиасы типа ?p=33 ? То есть алиасы в формате запроса.

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

Например: есть стандартный друпальный адрес domain.com/node/111, который нужно подменять на domain.com/?p=256.

Комментарии

Аватар пользователя Sun-fire Sun-fire 5 ноября 2010 в 16:15

UPD: Немного уточнил ТЗ, и задача усложнилась...

Необходимо не просто организовать редирект, а по хитрой схеме.

Алгоритм:

Пользователь приходит по линку domain.com/?p=256, его нужно направить 301 редиректом на domain.com/something, который на самом деле является domain.com/node/111.

Можно ли такое организовать? По сути тут два алиаса, но насколько мне известно, даже если есть несколько алиасов на один экземпляр контента, работает только последний алиас в списке.

Аватар пользователя Sun-fire Sun-fire 5 ноября 2010 в 17:31

"<a href="mailto:v1adimir@drupal.org">v1adimir@drupal.org</a>" wrote:
сдается мне, что под эту задачу будет проще и правильнее написать кучу правил для mod_rewrite в .htaccess

Трудоемко, и сложновато, ибо нужно обеспечить подмену адресов для этак 20К позиций в интернет-магазине.

"RxB" wrote:

Под эту задачу проще написать модуль с hook_init() внутри

Тоже уже смотрю в сторону программного решения. Хотя заметил интересную особенность. Если создать два алиаса для одной ноды, то "официальным" будет только последний алиас, а предидущий алиас будет редиректить на последний.

Но есть еще трабл: глобал редирект не хочет корректно обрабатывать алиасы, которые начинаются со знака вопроса. Например алиас /?p=33 редиректит на главную страницу сайта, тогда как он связан с определенной нодой.

Все сводится теперь к сабжу - как заставить глобал редирект понимать алиасы типа: /?p=33 ???

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 5 ноября 2010 в 17:35

"Sun-fire" wrote:
Все сводится теперь к сабжу - как заставить глобал редирект понимать алиасы типа: /?p=33 ???

никак
"RxB" wrote:
Под эту задачу проще написать модуль с hook_init() внутри

Аватар пользователя Sun-fire Sun-fire 10 ноября 2010 в 16:34

Проблему решил следующим образом. Написал модуль-надстройку над Global Redirect, который перехватывает строку запроса, ищет в ней специфические элементы по нужным мне шаблонам. Если не находит - отдает на Global Redirect как есть.

Если находит - смотрит по базе данных чистый урл для перехваченого алиаса, подменяет его, и отдает на Global Redirect. Если не находит - отдает 301-й на главную.

Проблему "двойных" алиасов решил кастомной таблицей, которая частично дублирует структуру стандартной url_alias. Присвоение "специфических" алиасов реализовал в кастомном импортере данных. Все вместе заняло около сотни строчек кода. Если кому-то интересны подробности как и что - пишите в ЛС.

Аватар пользователя afishi afishi 31 декабря 2010 в 0:50

есть у меня домен.рф надо чтобы при его открытии он открывал ноду с другого сайта... типа zaz.ru/?=node/13451

или 2 вариант
при открывании домен.домен.рф открывался домен домен.рф\ноде

есть идеи?

Аватар пользователя Sun-fire Sun-fire 4 января 2011 в 16:37

1. Если я правильно понял суть проблемы, то нужно чтобы с домен.рф редиректило на zaz.ru/?=node/13451 Для этого проще всего задать 301 редирект через htaccess.

Выглядеть директива будет примерно так: Redirect 301 / http://zaz.ru/?=node/13451

2. Решается аналогичным образом 301 редиректом через htaccess.

Аватар пользователя afishi afishi 9 января 2011 в 13:07

а этот htaccess на каком сайте лежит?
если у меня ничего не открывается, я могу просто прописать на парковку и он туда будет выбрасывать...
а вот как 3 уровня прописать?

типа вася.пупкин.рф если его как такого не существует и он перекидывает на http://zaz.ru/?=node/13451

Аватар пользователя Sun-fire Sun-fire 9 января 2011 в 22:59

Если Вы ходите, чтобы с домен.рф редиректило на zaz.ru/?=node/13451, Вы прописываете правила в htaccess на сайте домен.рф

По "трем уровням" - не понял сути вопроса.

Аватар пользователя afishi afishi 12 января 2011 в 12:01

домен 3 уровня. от которого есть только домен - нет хостинга и нет самого сайта. а надо чтобы при наборе домена 3 уровня открывал сайт другой и конкретную страницу. - сейчас понятно?

Аватар пользователя Sun-fire Sun-fire 12 января 2011 в 12:48

Если домен к хостингу не привязан то по идее нельзя. Потому как редирект через htaccess делать нужно, а он на хостинге лежать должен.