Вопрос или проблема
У меня есть установка WordPress, которую я превратил в сеть мультисайтов. Я использую cPanel и следовал всем инструкциям по настройке установки WordPress. Я настроил режим подсайтов, поэтому для каждого нового сайта мне нужно создать подсайт, используя cPanel моего поставщика общих хостингов.
Проблема в том, что я получаю ошибку 403 каждый раз, когда пытаюсь получить доступ к сайту подсайта. Как я могу это исправить и правильный ли код в .htaccess
?
ПБ: каждый подсайт имеет свою собственную директорию на сервере при создании, поэтому, например, если в cPanel я задаю mysite.example.com
как подсайт, соответствующая директория будет создана в корне сервера с названием mysite.example.com
. Я прочитал, что подсайты должны указывать на основную директорию установки WordPress. Я также настроил подстановочный символ, но без успеха.
Вот код .htaccess
.
# BEGIN Custom
<IfModule mod_rewrite.c>
Options All -Indexes
Options FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}/$1 [NC,R=301,L]
</IfModule>
<IfModule mod_headers.c>
#Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header set X-Content-Type-Options nosniff
Header set X-XSS-Protection "1; mode=block"
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
Header unset X-Powered-By
Header unset X-Pingback
Header unset SERVER
</IfModule>
<FilesMatch "(^\.|wp-config(-sample)*\.php)">
Order Deny,Allow
Deny from all
</FilesMatch>
# END Custom
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# добавление завершающего слэша к /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]
</IfModule>
# END WordPress
код wp-config.php
// HTTPS
if( strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) $_SERVER['HTTPS'] = 'on';
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', true);
define('DOMAIN_CURRENT_SITE', 'mysite.com');
define('PATH_CURRENT_SITE', "https://wordpress.stackexchange.com/");
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
каждый подсайт имеет свою собственную директорию на сервере при создании, поэтому, например, если в cPanel я задаю
mysite.example.com
как подсайт, соответствующая директория будет создана в корне сервера с названиемmysite.example.com
. Я прочитал, что подсайты должны указывать на основную директорию установки wordpress.
Вы, кажется, отвечаете на свой собственный вопрос. Да, все подсайты должны указывать на основную установку WordPress. Вот так работает мультисайт, все запросы обрабатываются одной и той же установкой WordPress, одним и тем же фронт-контроллером (директивы mod_rewrite в корневом файле .htaccess
).
При создании подсайта в cPanel у вас должно быть полное управление “корнем документа” подсайтов. (Это даже позволяет вам указывать его на директорию, которая полностью вне корня документа основных доменов, если вы хотите.)
Создавая подсайт, который указывает на подпапку, вы устанавливаете DocumentRoot
этого подсайта на эту подпапку. Он не сможет получить доступ к файлам в директории выше (корень документа основных доменов).
Когда вы получаете доступ к подсайту, который, вероятно, не имеет индексного документа (и список директорий отключен), тогда вы получите ответ 403 Forbidden по умолчанию.
Ответ или решение
Чтобы исправить ошибку 403 на сети WordPress Multisite, использующей поддомены, важно рассмотреть несколько ключевых аспектов настройки вашего сервера и конфигурации WordPress. Ошибка 403 возникает, когда сервер отказывает в доступе к запрашиваемому ресурсу. В контексте WordPress Multisite с поддоменами основными причинами этой ошибки могут быть неправильные настройки .htaccess, конфигурация поддоменов в cPanel и файл wp-config.php.
Шаг 1: Проверка настроек cPanel
Первым шагом является убедиться, что все поддомены правильно настроены в cPanel. Поддомены в конфигурации WordPress Multisite должны указывать на корневую директорию установки WordPress, а не на отдельные папки для каждого поддомена. Вот как этого добиться:
- Создание поддомена: В cPanel создайте поддомен, например,
mysite.example.com
. - Настройка DocumentRoot: При создании поддомена установите для него DocumentRoot (корневую директорию) на тот же уровень, что и главная установка WordPress. Это может быть что-то вроде
/public_html/
или/home/username/public_html/
(в зависимости от вашей структуры папок). Убедитесь, что путь не указывает на подкаталог, который находится не в корневой директории.
Шаг 2: Правильная конфигурация .htaccess
Ваша конфигурация .htaccess выглядит довольно хорошо, за исключением одного момента — спецификации путей для поддоменов. Правильный .htaccess файл для WordPress Multisite с поддоменами должен выглядеть так:
# BEGIN Custom
<IfModule mod_rewrite.c>
Options All -Indexes
Options FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}/$1 [NC,R=301,L]
</IfModule>
<IfModule mod_headers.c>
Header set X-Content-Type-Options nosniff
Header set X-XSS-Protection "1; mode=block"
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
Header unset X-Powered-By
Header unset X-Pingback
Header unset SERVER
</IfModule>
<FilesMatch "(^\.|wp-config(-sample)*\.php)">
Order Deny,Allow
Deny from all
</FilesMatch>
# END Custom
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]
</IfModule>
# END WordPress
Шаг 3: Настройки в wp-config.php
Ваш файл wp-config.php также должен быть правильно настроен. Пример конфигурации:
// HTTPS
if( strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) $_SERVER['HTTPS'] = 'on';
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', true);
define('DOMAIN_CURRENT_SITE', 'example.com'); // Используйте ваш основной домен
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
Шаг 4: Диагностика и тестирование
- После настройки всех параметров попробуйте снова получить доступ к поддомену. Если вы все еще видите ошибку 403, проверьте журналы ошибок сервера (error logs) в cPanel для получения дополнительной информации о причине отказа в доступе.
- Убедитесь, что у вашего веб-сервера есть необходимые разрешения для доступа к директориям и файлам вашего WordPress.
- Если ваш веб-сервер использует SSL, проверьте настройки HTTPS, чтобы убедиться, что они задействованы для всех поддоменов.
Заключение
Следуя вышеописанным шагам, вы сможете устранить ошибку 403 на вашей сети WordPress Multisite с использованием поддоменов. Основное внимание следует уделить правильной настройке cPanel, конфигурации .htaccess и wp-config.php. Если проблема все еще не решена, рекомендуется обратиться в службу поддержки вашего хостинг-провайдера для получения помощи.