Заменить базовый путь с установленным Drupal

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

Аватар пользователя Lord of Cats Lord of Cats 13 декабря 2017 в 15:44

Добрый день.

Подскажите, пожалуйста, как изменить базовый путь с установленным Drupal.

Изначально, сайт располагался по адресу:

https://site.ru/

Теперь сайт должен корректно открываться по адресу:

https://site.ru/subdirectory/

Я раскомментировал в файле /sites/default/settings.php параметр $base_url и присвоил ему значение:

$base_url = 'https://site.ru/subdirectory';

Сайт начал открываться по новому адресу, после чего я успешно авторизировался как в системе как пользователь.

Проблема: в пользовательских формах action ведет по старому адресу (как в админ. панели так и в формах на клиентской части). Пример:

<form action="/node/add/article" ...

Можно ли сделать так, чтобы в значении атрибута action было action="/subdirectory/<путь>"?

Лучший ответ

Аватар пользователя Lord of Cats Lord of Cats 15 декабря 2017 в 10:12

Нашел решение. В файле /sites/default/settings.php требуется прописать:

<?php
$hostsubfolder 
'/subdirectory';
$base_url 'https://site.ru' $hostsubfolder;
$_SERVER['REQUEST_URI'] = $hostsubfolder $_SERVER['REQUEST_URI'];
?>

Комментарии

Аватар пользователя ivnish ivnish 13 декабря 2017 в 15:56

На самом деле друпал нигде не сохраняет установленный путь (как WP, например), поэтому сайт можно свободно перемещать между доменами и между каталогами, даже без изменения $base_url. В вашем конкретном случае надо более детально разбираться, возможно где-то в кастомных модулях был прописан абсолютный путь

Аватар пользователя Lord of Cats Lord of Cats 13 декабря 2017 в 16:09

Ничего не открывается (страница не найдена), т.к. нет такого алиаса или URL'а из собственного модуля. Выделенный физический сервер под Debian.

Аватар пользователя Lord of Cats Lord of Cats 13 декабря 2017 в 16:19

В целях отладки есть две копии одного и того же сайта которые подключаются к одной и той же БД MySQL. Оба они HTTPS, но у обоих разные сертификаты. У второго отличается способ шифрования.

Аватар пользователя Lord of Cats Lord of Cats 13 декабря 2017 в 16:29

Это был бы идеальный вариант, но ПО, которое шифрует данные, портит URL.
Например:
test.site.ru - оригинальный сайт
security.site.ru/test/ - тот же сайт по защищенному каналу
В ПО которое предоставляет защищенный доступ нет возможности создать новый поддомен.

Аватар пользователя ivnish ivnish 13 декабря 2017 в 16:23

А вообще, я никогда не видел, чтобы кто-либо так делал (этот же сайт в дочерний каталог). Это вообще законно?

Аватар пользователя Phantom63rus Phantom63rus 14 декабря 2017 в 1:34

Предположительно может застрять в кеше.

Но вот это

Lord of Cats wrote:

В целях отладки есть две копии одного и того же сайта которые подключаются к одной и той же БД MySQL.
потенциально ведёт к большим проблемам.

Если отлаживается новая тема, то есть модули, которые позволяют для разных пользователей использовать разные.

Аватар пользователя Lord of Cats Lord of Cats 14 декабря 2017 в 9:14

Кеш чистил путем изменения значения в атрибуте action в административной панели (Конфигурация > Производительность > Очистка кеша). Приписал в начале путь /subdirectory к уже имеющемуся.

Аватар пользователя gun_dose gun_dose 14 декабря 2017 в 9:09

Скорее всего вам нужно не копировать сайт. А научить как-то вебсервер понимать, что субдиректория - это тоже типа как корень домена.

Аватар пользователя Lord of Cats Lord of Cats 14 декабря 2017 в 11:59

Хм... Есть один вариант.
Возможно, в PHP надо сделать так:

<?php
$hostname 
gethostname();
$_SERVER['REQUEST_URI'] = '/' $hostname $_SERVER['REQUEST_URI'];
?>
Аватар пользователя mbaev mbaev 14 декабря 2017 в 13:30

Если доступа к серверу нет, то ни один специалист не поможет. Если доступ есть, то не вижу проблем "научить" его понимать субдомены.

Аватар пользователя Lord of Cats Lord of Cats 14 декабря 2017 в 13:45

Просто домен это точка входа в административную панель TLS-криптошлюза. У меня как программиста прямого доступа к нему нет. Но в целом понял вашу мысль. Как я говорил ранее, это хорошая идея, но мне надо бы задать поддиректорию как корень сайта.

Аватар пользователя bsyomov bsyomov 15 декабря 2017 в 17:24

Механизм извещения о упоминании, безусловно хорошая штука, но я пока не понимаю, чем-бы я мог помочь тут. Smile

Тут нет никакой проблемы с сервером, тут какие-то странности в поведении форм, насколько я понимаю...
А, вообще, нужно просто два сайта в мультисайтинге, и два конфига drupal, соответственно, с одной кодовой базой, базой данных и симлинком между /sites/sitename/files. Если решится проблема с формами и $base_url, это будет работать нормально.

Аватар пользователя Lord of Cats Lord of Cats 15 декабря 2017 в 10:12

Нашел решение. В файле /sites/default/settings.php требуется прописать:

<?php
$hostsubfolder 
'/subdirectory';
$base_url 'https://site.ru' $hostsubfolder;
$_SERVER['REQUEST_URI'] = $hostsubfolder $_SERVER['REQUEST_URI'];
?>