Дайте языковой префикс всем узлам (/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?

Author: Ashish Deynap, 2016-12-17

5 answers

Вот правило перезаписи, которое должно быть записано в файле .htaccess, расположенном в корневом каталоге Drupal.

RewriteEngine on RewriteCond %{REQUEST_URI} !/he RewriteRule ^(.*) http://www.domain.com/he%{REQUEST_URI} [L,R=301]

Надеюсь, для вас это имеет смысл.

 3
Author: Ashish Deynap, 2016-12-20 06:45:23

Если вы хотите иметь разные поддомены для разных языков, я думаю, что 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 оцениваются для каждого запроса! Чем больше у вас правил, тем больше времени сервер тратит на их оценку.

Надеюсь, что это помогает.

 2
Author: Jigarius, 2016-12-23 17:55:06

Поскольку вы делаете это специфичным для языкового префикса, я бы предложил использовать основной модуль "Язык", поскольку он (а) основной и (б) прост в управлении. Попробуйте выполнить следующее:

  1. Включите модуль "Язык" (language); по умолчанию он не включен
  2. Если вы не сделали свой сайт явно многоязычным, ваш контент написан на иврите, но язык вашего сайта по умолчанию - английский. Вы можете игнорировать это, если это не так.
  3. Вам нужно два языка для языка добавление префиксов URL-адресов для работы. Если у вас уже есть два языка, например, he и en, вы можете пропустить это. Перейдите в раздел admin/config/regional/language и добавьте второй язык в свой экземпляр Drupal (неважно, какой) => это приведет к принудительному использованию языковых префиксов (см. Следующий шаг).
  4. Перейдите в раздел администратор/конфигурация/регион/язык/обнаружение и настройте метод обнаружения "URL"; он должен быть фактически активирован и предшествовать всем остальным параметрам.
  5. Задайте префикс пути по умолчанию язык для "он".
  6. Сохраните и очистите кэш. Все ваши пути в Drupal теперь будут иметь префикс "он".

Удачи!

Примечание: Существующие URL-адреса по-прежнему действительны, но после нескольких кликов в навигации ваши URL-адреса должны иметь префикс "он".

 2
Author: Stefanos Petrakis, 2016-12-26 19:39:23

Вы можете сделать это, написав правило перезаписи в файле .htaccess, расположенном в корневом каталоге Drupal. Проверьте этот ответ.

 1
Author: Yogesh, 2017-05-23 12:41:25

ПОСКОЛЬКУ ваше требование касается дочернего сайта (с поддоменом). Лучше настроить веб-сайт с поддоменом как "он". Чтобы создать мультисайт, выполните действия, указанные в первом ответе по ссылке Drupal 8: Несколько сайтов в подкаталогах не работают

Надеюсь, это поможет вам.

 1
Author: developer, 2017-04-13 12:47:02