Добрый день.
Подскажите, пожалуйста, как изменить базовый путь с установленным Drupal.
Изначально, сайт располагался по адресу:
Теперь сайт должен корректно открываться по адресу:
Я раскомментировал в файле /sites/default/settings.php параметр $base_url и присвоил ему значение:
$base_url = 'https://site.ru/subdirectory';
Сайт начал открываться по новому адресу, после чего я успешно авторизировался как в системе как пользователь.
Проблема: в пользовательских формах action ведет по старому адресу (как в админ. панели так и в формах на клиентской части). Пример:
<form action="/node/add/article" ...
Можно ли сделать так, чтобы в значении атрибута action было action="/subdirectory/<путь>"?
Комментарии
На самом деле друпал нигде не сохраняет установленный путь (как WP, например), поэтому сайт можно свободно перемещать между доменами и между каталогами, даже без изменения $base_url. В вашем конкретном случае надо более детально разбираться, возможно где-то в кастомных модулях был прописан абсолютный путь
Есть какие-нибудь предположения?
А что открывается по https://site.ru/subdirectory/ без изменения $base_url ?
Хостинг shared или VPS/VDS?
Ничего не открывается (страница не найдена), т.к. нет такого алиаса или URL'а из собственного модуля. Выделенный физический сервер под Debian.
Загвоздка в том, что один и тот же сайт должен открываться по обоим адресам.
А БД одна на оба сайта?
Да. По одному из адресов (второй) предоставляется защищенный канал.
HTTPS что ли?
В целях отладки есть две копии одного и того же сайта которые подключаются к одной и той же БД MySQL. Оба они HTTPS, но у обоих разные сертификаты. У второго отличается способ шифрования.
Для второго используйте субдомен, например dev.site.ru
Это был бы идеальный вариант, но ПО, которое шифрует данные, портит URL.
Например:
test.site.ru - оригинальный сайт
security.site.ru/test/ - тот же сайт по защищенному каналу
В ПО которое предоставляет защищенный доступ нет возможности создать новый поддомен.
А вообще, я никогда не видел, чтобы кто-либо так делал (этот же сайт в дочерний каталог). Это вообще законно?
Я тоже с таким первый раз столкнулся. Обычно для таких вещей делают поддомен.
Так, просто, положите Друпал в подпапку subdirectory.
Нет, так нельзя. Технически этой папки нет. Содержимое находится в директории /var/www/html.
Сервер натравите на нужную папку.
Поможете натравить? Что прописать можно и где?
Сорри, навскидку не напишу, а оттестировать нет времени.
Предположительно может застрять в кеше.
Но вот это
потенциально ведёт к большим проблемам.Если отлаживается новая тема, то есть модули, которые позволяют для разных пользователей использовать разные.
Кеш чистил путем изменения значения в атрибуте action в административной панели (Конфигурация > Производительность > Очистка кеша). Приписал в начале путь /subdirectory к уже имеющемуся.
Скорее всего вам нужно не копировать сайт. А научить как-то вебсервер понимать, что субдиректория - это тоже типа как корень домена.
Вы имеете в виду правки в файле .htaccess? Может быть RewriteBase сможет помочь?
Тут нужен хороший специалист по серверам. @bsyomov призываю тебя!
Хм... Есть один вариант.
Возможно, в PHP надо сделать так:
<?php
$hostname = gethostname();
$_SERVER['REQUEST_URI'] = '/' . $hostname . $_SERVER['REQUEST_URI'];
?>
Эта правка делается в /sites/default/settings.php
Если доступа к серверу нет, то ни один специалист не поможет. Если доступ есть, то не вижу проблем "научить" его понимать субдомены.
Просто домен это точка входа в административную панель TLS-криптошлюза. У меня как программиста прямого доступа к нему нет. Но в целом понял вашу мысль. Как я говорил ранее, это хорошая идея, но мне надо бы задать поддиректорию как корень сайта.
Механизм извещения о упоминании, безусловно хорошая штука, но я пока не понимаю, чем-бы я мог помочь тут.
Тут нет никакой проблемы с сервером, тут какие-то странности в поведении форм, насколько я понимаю...
А, вообще, нужно просто два сайта в мультисайтинге, и два конфига drupal, соответственно, с одной кодовой базой, базой данных и симлинком между /sites/sitename/files. Если решится проблема с формами и $base_url, это будет работать нормально.
Мне кажется нужно зайти с другого конца: какой именно функционал реализуется описанным финтом?
Доступ по защищенному TLS-каналу.
Нашел решение. В файле /sites/default/settings.php требуется прописать:
<?php
$hostsubfolder = '/subdirectory';
$base_url = 'https://site.ru' . $hostsubfolder;
$_SERVER['REQUEST_URI'] = $hostsubfolder . $_SERVER['REQUEST_URI'];
?>