Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

Устранить проблемы с чистотой URL в Drupal 8

23/04/2020, by maria

Основы

В Drupal 8 чистые URL-адреса включены по умолчанию и не могут быть отключены. Однако модуль перезаписи должен быть установлен на вашем веб-сервере.

Проверьте адресную строку вашего браузера. URL вашего сайта не должны содержать ?q= в URL.

Пример правильных «чистых URL»

http://www.example.com/node/83

Пример «чистых URL», которые не работают

http://www.example.com/?q=node/83

Существуют дополнительные инструкции по настройке чистых URL-адресов для различных систем, таких как apache, wamp, xampp и IIS.

Конфигурация сервера для чистых URL

Вы можете прочитать больше о других требованиях веб-сервера

Конфигурация сервера для Чистых URL на выделенном сервере с httpd.conf

Включение чистых URL-адресов на выделенном сервере включает следующие шаги:

1. Включите mod_rewrite для Apache. Вы можете поговорить с вашим веб-хостом или обратиться к документации Apache для mod_rewrite, чтобы получить больше информации о том, как это сделать. Как минимум, для этого потребуется убедиться, что mod_rewrite включен для вашей установки Apache.

Чтобы проверить, доступен ли mod_rewrite в Apache2, вы можете ввести в командной строке следующее, чтобы вывести список всех установленных модулей Apache:

apache2ctl -M

В некоторых системах эта команда может быть:

apachectl -M

или

httpd -M

2. В выходных данных проверьте, включен ли rewrite_module в список модулей.

Если модуль перезаписи отсутствует в списке, его нужно будет либо скомпилировать, либо сделать доступным как загружаемый модуль. Вообще говоря, вы можете сказать Apache загрузить модуль, включив:

LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c

в вашем файле конфигурации Apache (см. ниже информацию о файле конфигурации). Обязательно раскомментируйте AddModule mod_rewrite.c, если он находится в вашем файле конфигурации, но был закомментирован. Следующее может работать, чтобы включить модуль без редактирования каких-либо файлов:

a2enmod rewrite

Обратите внимание, что эти подходы могут не работать для всех комбинаций операционной системы и сервера Apache - обратитесь к документации Apache, прилагаемой к программному обеспечению Apache, для правильного синтаксиса.

Не забудьте перезапустить Apache, чтобы новая конфигурация вступила в силу.

3. Следующий шаг - найти соответствующий файл конфигурации Apache для вашего сайта. В зависимости от конфигурации вашего сервера подходящим файлом конфигурации Apache может быть httpd.conf, специфичный для виртуального хоста файл (vhost.conf), определенный файл сайта (например, «по умолчанию») или apache2.conf. Обычно они находятся в /etc/httpd/conf, /etc/apache2 или в подкаталоге; если нет, попробуйте команду:

find /etc -name httpd* or find /etc -name apache2* 

чтобы найти файл, если он находится в другом месте вашей файловой системы.

Если у вас нет разрешения на запись в эти файлы, и чистые URL-адреса не работают для вас из коробки, вам, возможно, придется обратиться к системному администратору или хостинг-провайдеру за помощью. Тем не менее, вы все равно сможете прочитать эти файлы конфигурации, чтобы немного устранить неполадки.

4. Следующим шагом является копирование или включение настроек Drupal непосредственно в файл конфигурации. Здесь приведены инструкции о том, как включить директивы Drupal в файл конфигурации. Обратитесь к файлу .htaccess в Drupal для примеров правил, таких как следующие для Drupal 8:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]

Или этот пример на Debian 8 + Apache2 + ISPConfig с использованием подстановочного знака для соответствия всем установленным сайтам:

<Directory /var/www/clients/*/*/web/>
  RewriteEngine on
  RewriteBase /
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</Directory> 

Убедитесь, что вы просматриваете файл .htaccess для своей основной версии Drupal (то есть, 8.x).

Примечание. Если вы не хотите помещать правила перезаписи в файл конфигурации Apache, вы все равно можете просто использовать файл .htaccess Drupal (как если бы вы работали на виртуальном хостинге). Вам нужно будет установить директиву Allow Override в файле конфигурации Apache (это позволит локальным переопределениям .htaccess на вашем сайте):

AllowOverride All
AccessFileName .htaccess

Прочитайте «За кулисами» с помощью Apache .htaccess для подробного просмотра .htaccess. Также может оказаться полезным просмотреть примеры директив Apache 2 AllowOverride.

Примечание, касающееся MultiViews: Apache поддерживает функцию, называемую «MultiViews» (в более общем смысле: «Согласование содержимого»), которая позволяет переходить на ваши страницы без необходимости расширения файлов. Например, если у вас есть файл с именем «valuation.txt », сайт с поддержкой MultiViews может получить доступ к этому файлу с помощью URL-адреса« example.com/evaluation ». Хотя MultiViews могут быть удобной функцией при сознательном использовании, они могут вызывать проблемы, когда чистые URL-адреса Drupal включены. Если вы не знаете, что делаете, вам не следует использовать MultiViews, если вы планируете использовать функцию очистки URL-адресов Drupal. Однако MultiViews не включены в установку Apache по умолчанию, поэтому, вероятно, это примечание не будет применяться. Обратитесь к документации Apache для получения дополнительной информации о MultiViews.

Конфигурация сервера для чистых URL на общем сервере с .htaccess

Стандартная установка Drupal содержит образец файла .htaccess, которого должно быть достаточно для запуска чистых URL-адресов. Копирование этого файла легко пропустить из-за ведущей «точки». Поэтому, прежде чем включать чистые URL-адреса, убедитесь, что этот файл существует в вашей установке Drupal.

Чтобы проверить это в терминале, используйте ls -a, чтобы убедиться, что «точечные» файлы также перечислены.

Если у вас установлен этот файл, но чистые URL-адреса по-прежнему не работают, вы можете попробовать некоторые из советов по устранению неполадок ниже. Если вы по-прежнему не можете заставить работать чистые URL-адреса, обратитесь к вашему хостинг-провайдеру.

Устранение проблем

Проверьте, используется ли .htaccess

Apache необходимо явно указать для соблюдения инструкций в файле .htaccess ваших сайтов. Это отключено по умолчанию, хотя большинство хостов включит его. Это то, что делает директива AllowOverride All выше - она заставляет .htaccess начать работать.

Чтобы проверить, читает ли ваш хост файл .htaccess, вы можете (временно) добавить некоторую строку мусора в файл, пытаясь сломать его. Ваш сайт должен немедленно начать возвращать «Ошибка 500 серверов» при загрузке страницы из этого каталога из-за этой неправильной конфигурации. (Немедленно удалите строку мусора.)

Если вы сделаете это, и ваш сайт не сломался - тогда .htaccess будет игнорироваться, и вы не сможете использовать чистые URL-адреса, пока не получите поддержку от своих хостов или не включите ее в httpd.conf, как описано выше. Некоторые хосты позволяют вам включить эту опцию через панель управления своим сайтом, поэтому посмотрите сначала.

Настройка RewriteBase

Основным параметром конфигурации, который может потребоваться изменить для вашего сайта, является RewriteBase. Это может быть указано в файле Drupal .htaccess или в файле httpd.conf, в зависимости от того, куда вы помещаете директивы переписывания Drupal (см. Выше). По умолчанию параметр RewriteBase закомментирован из файла Drupal .htaccess, и это хорошо работает для многих конфигураций.

Если у вас возникли проблемы с получением чистых URL-адресов, возможно, вам придется изменить этот параметр. Например, если ваш Apache DocumentRoot имеет вид /var/www / (т.е. /var/www/index.html - это то, что отображается, когда вы указываете свой браузер на http://www.example.com/), а ваша установка Drupal - установлен в подкаталоге /var/www/mysite/, тогда RewriteBase может быть установлен в

RewriteBase/mysite

и это может помочь. В некоторых конфигурациях настройка

RewriteBase /

позволит чистым URL работать.

$base_url

Возможно, вам придется вручную установить переменную $ base_url в файле settings.php, если она еще не установлена. В настоящее время известно, что серверы, на которых работает FastCGI, могут столкнуться с проблемами, если оставить переменную $ base_url закомментированной (см. Http://bugs.php.net/bug.php?id=19656).

Multi-сайт

RewriteBase работает, когда ваша установка Drupal обслуживает только один сайт, или когда все сайты, которые он обслуживает, находятся в одном и том же подкаталоге своих доменов. Например,

RewriteBase / 

будет работать на следующих сайтах:

http://www.example.com/
http://www.example2.com/
http://www.example3.com/

 

RewriteBase /mysite

 будет работать на следующих сайтах:

http://www.example.com/mysite
http://www.example2.com/mysite
http://www.example3.com/mysite

Однако, если ваши сайты находятся в разных подкаталогах, RewriteBase не будет работать. Вам нужно будет создать специальное правило для каждого подкаталога. Например, ваша установка Drupal может обслуживать следующие сайты:

http://www.example.com/
http://www.example.com/mysite

Чтобы включить чистые URL-адреса для обоих сайтов, вам необходимо добавить

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/mysite/
RewriteRule ^ /mysite/index.php [L]

перед существующими правилами переписывания.

Расположение файла index.php

Для некоторых конфигураций сервера может потребоваться другое изменение файла .htaccess Drupal. Найдите строку, похожую на эту, в конце вашего файла Drupal .htaccess:

<code>RewriteRule ^ index.php [L] </code>

Вам может понадобиться заменить index.php на URL-путь к файлу index.php вашей инсталляции Drupal (только часть после базового URL). Например, если URL домашней страницы вашего сайта http://example.com/subdir/, вам может потребоваться использовать /subdir/index.php вместо index.php. Если URL домашней страницы вашего сайта http://example.com/, вам может потребоваться использовать /index.php вместо index.php. Это необходимо для некоторых, но не для всех конфигураций сервера.

Создавайте четкие URL-адреса с помощью модуля Path

Использование чистых URL-адресов заставит Drupal генерировать URL-адреса в форме "http://www.example.com/node/83". Чтобы изменить часть URL-адреса «node/##» на что-то более похожее на «news/june-1st-news», сайту потребуется включить модуль Path. См. Страницу руководства модуля Path для получения дополнительной информации об использовании модуля Path.

Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.