Дайте языковой префикс всем узлам (/he/) - Возможно ли без модулей contrib?
У меня есть сайт с примерно 500 страницами (узлы, страницы таксономии и некоторые представления), которые все на иврите.
Я хочу, чтобы все пути были, скажем:
/node/example1
/taxonomy/categories/term1
/taxonomy/tags/tag1
/views/view1
ДО
/he/node/example1
/he/taxonomy/categories/term1
/he/taxonomy/tags/tag1
/he/views/view1
Я хочу, чтобы это было для всех страниц вообще, в качестве первого этапа превращения этого сайта в дочерний сайт (с поддоменом).
Возможно ли это в Drupal 8 без модулей contrib? то есть, например, без установки Pathauto?
5 answers
Вот правило перезаписи, которое должно быть записано в файле .htaccess, расположенном в корневом каталоге Drupal.
RewriteEngine on
RewriteCond %{REQUEST_URI} !/he
RewriteRule ^(.*) http://www.domain.com/he%{REQUEST_URI} [L,R=301]
Надеюсь, для вас это имеет смысл.
Если вы хотите иметь разные поддомены для разных языков, я думаю, что Drupal должен иметь возможность определять код языка из поддомена, и не должно быть необходимости добавлять префиксы URL. Вы можете сделать первый шаг, настроив поддомен he.example.com
и перенаправляя запросы с вашего основного сайта на поддомен he
, пока не добавите другие языки и диалоговое окно выбора языка в example.com
(без поддоменов).
Привет! Я вижу следующее решения:
Решение 1. Изменение путей к узлам
- Используя pathauto (который вы не хотите использовать), вы можете установить префикс узла в
/he/
. - Запуск одноразового скрипта для добавления префикса ко всем псевдонимам URL-адресов узлов и в будущем добавление префикса
/he
вручную.
Решение 2: .htaccess
Использование .htaccess
для перезаписи всех URL-адресов для интерпретации /he/*
URL-адресов как /*
. Но это может также применить префикс к другим путям - выполнение это может быть сложно только для узлов в зависимости от их существующих URL-адресов.
RewriteEngine on
RewriteCond %{REQUEST_URI} !/he
RewriteRule ^(.*) http://www.domain.com/he%{REQUEST_URI} [L,R=301]
ПРИМЕЧАНИЕ: Извлечение кода, скопированное из ответа Ашиша Дейнапа.
Но я слышал, что лучше избегать .htaccess
перенаправлений, насколько это возможно, потому что:
-
.htaccess
может быть обновлен версиями Drupal. - Правила в
.htaccess
оцениваются для каждого запроса! Чем больше у вас правил, тем больше времени сервер тратит на их оценку.
Надеюсь, что это помогает.
Поскольку вы делаете это специфичным для языкового префикса, я бы предложил использовать основной модуль "Язык", поскольку он (а) основной и (б) прост в управлении. Попробуйте выполнить следующее:
- Включите модуль "Язык" (language); по умолчанию он не включен
- Если вы не сделали свой сайт явно многоязычным, ваш контент написан на иврите, но язык вашего сайта по умолчанию - английский. Вы можете игнорировать это, если это не так.
- Вам нужно два языка для языка добавление префиксов URL-адресов для работы. Если у вас уже есть два языка, например, he и en, вы можете пропустить это. Перейдите в раздел admin/config/regional/language и добавьте второй язык в свой экземпляр Drupal (неважно, какой) => это приведет к принудительному использованию языковых префиксов (см. Следующий шаг).
- Перейдите в раздел администратор/конфигурация/регион/язык/обнаружение и настройте метод обнаружения "URL"; он должен быть фактически активирован и предшествовать всем остальным параметрам.
- Задайте префикс пути по умолчанию язык для "он".
- Сохраните и очистите кэш. Все ваши пути в Drupal теперь будут иметь префикс "он".
Удачи!
Примечание: Существующие URL-адреса по-прежнему действительны, но после нескольких кликов в навигации ваши URL-адреса должны иметь префикс "он".
Вы можете сделать это, написав правило перезаписи в файле .htaccess
, расположенном в корневом каталоге Drupal. Проверьте этот ответ.
ПОСКОЛЬКУ ваше требование касается дочернего сайта (с поддоменом). Лучше настроить веб-сайт с поддоменом как "он". Чтобы создать мультисайт, выполните действия, указанные в первом ответе по ссылке Drupal 8: Несколько сайтов в подкаталогах не работают
Надеюсь, это поможет вам.