Судя и по этому сайту, и по issues на drupal.org многим приходилось сталкиваться с одной проблемой, проявляющейся в нескольких случаях:
1. При установке Drupal'а на локальной машине (например, на Denwer'е) после переноса на сервер изображения, загруженные при помощи поля Imagefield, не показываются. Если посмотреть на адрес картинки, можно увидеть примерно такой путь:
sites/mysite.ru/files/sites/mysite.local/files/screenshots/x.jpg (вместо sites/mysite.ru/files/screenshots/x.jpg)
2. При использовании одной и той же базы для разных сайтов (например, когда мы хотим сделать синоним mysite.com для сайта mysite.ru) появляется та же проблема с адресом, только в данном случае он выглядит как sites/mysite.com/files/sites/mysite.ru/files/screenshots/x.jpg
Проблема, если я правильно понял, заключается в том, что в таблице files путь записан в виде , а при выводе изображения "умный" Drupal сравнивает его с путем, прописанным в переменной "Путь файловой системы", и пытается определить, относительный это путь или абсолютный. То есть проблема, фактически, не в модуле ImageField, а в ядре Drupal'а (вроде как в 7 версии это поведение исправили).
Первую проблему можно решить, внеся исправления в БД. Например, таким образом (с drupal.org)
UPDATE `files` SET filepath = CONCAT('sites/[correctpath.org]/files/', filepath);
Внимание! Сам я этот способ не проверял, поэтому используйте на свой страх и риск. Не забудьте сделать backup БД.
Со второй сложнее. Поэтому - внимание! Универсальный способ, который позволяет решить обе проблемы сразу.
Суть фокуса - в использовании символических ссылок. Те, кто понимают, о чем я, уже собираются уходить. Погодите, не все так просто!
Да, есть соблазн сделать следующее:
ln -s mysite.com mysite.ru
Но проблему, как показывает практика, это не решает.
А теперь - правильный путь. Запускаем SSH, вводим имя пользователя, пароль...
cp -r mysite.ru mysite
Далее идем в настройки сайта ("Файловая система") и изменяем поле "Путь файловой системы":
sites/mysite/files
И, напоследок:
ln -s mysite mysite.ru
ln -s mysite mysite.com
Честно говоря, я думал, что после этого придется еще и вносить правки в БД. Однако обновления кэша оказалось достаточно.
Вопрос с переносом с локальной машины решается в точности так же, только для этого вам нужно создать symbolic links и на локальной машине, и на сервере - папка, на которую вы ссылаетесь, при этом должна называться одинаково. В windows, кстати, тоже можно создать такую ссылку.
Комментарии
UPDATE files SET filepath = REPLACE(filepath,"поменять это","на это")
Я пользуюсь этим. Работает на ура.
Это просто один из вариантов SQL-запроса. Он не решает проблемы с синонимами (когда нужно сделать несколько адресов для одного сайта).
Вот Спасибо!!!
До UPDATE я сам додумался.
А про символические ссылки - не знал.
Для синонимов мультисайтинга - то что нужно!!!
Один момент:
Синонимы русских доменов нужно прописывать всегда одинаково или всегда большими или всегда маленькими буквами.
Иначе символические ссылки не работают!
Или сделать по 2 символические ссылки на каждый русский синоним домена: одну большими буквами, а вторую маленькими.