Вопрос или проблема
У меня установлен основной WordPress в корневой директории, и теперь из-за долгой истории с несовместимыми плагинами мне нужно установить вторую полную версию WordPress в подпапке.
Главный сайт работает нормально, как и сайт в подпапке. Но это только до тех пор, пока я не активирую красивые постоянные ссылки на подсайте.
Как только на подсайте активированы постоянные ссылки, доступна только главная страница, любая другая страница захватывается основной установкой, которая выдает 404.
У меня следующее в основном .htaccess (в корневой папке сайта)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^domain.com
RewriteRule (.*) http://www.domain.com/$1 [R=301,L]
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
<Directory /path/to/subdir>
RewriteEngine On
RewriteBase /subdir/
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /subdir/index.php [L]
</Directory>
А это содержимое .htaccess, который находится в подпапке
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /subdir/
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /subdir/index.php [L]
</IfModule>
# END WordPress
Я думал, что либо .htaccess в подпапке, либо директива <Directory>
в основном .htaccess будет работать. В данный момент я в замешательстве.
Чаще всего эта проблема решается после сброса постоянных ссылок. Я имею в виду, что нужно просто нажать ‘Сохранить изменения’ на странице ‘Настройки постоянных ссылок’ в административной панели. Однако вы сказали, что пробовали красивые постоянные ссылки, и это не работает.
В разделе “Настройки > Основные”, пожалуйста, подтвердите, что вы обновили “Адрес WordPress (URL)” и “Адрес сайта (URL)” на подпапку.
Можете ли вы создать поддомен? Ваша подпапка будет указывать через поддомен с новым файлом htaccess. Надеюсь, что следующий код не находится в вашей подпапке.
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
Ответ или решение
Почему постоянные ссылки не работают на втором экземпляре WordPress, установленном в подкаталоге
Проблема с работой постоянных ссылок на втором экземпляре WordPress в подкаталоге может возникнуть из-за нескольких факторов, связанных с настройками .htaccess
и конфигурацией вашего веб-сервера. Давайте рассмотрим ситуацию более подробно.
1. Проверка настроек .htaccess
На основе информации, предоставленной в вашем запросе, вы имеете два файла .htaccess
: один в корне вашего сайта и другой в подкаталоге, содержащем ваш второй экземпляр WordPress.
Основной .htaccess
в корне сайта:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^domain.com
RewriteRule (.*) http://www.domain.com/$1 [R=301,L]
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
.htaccess
в подкаталоге:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /subdir/
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /subdir/index.php [L]
</IfModule>
# END WordPress
Проблемы и Возможные Решения
-
Изменение неверных правил перезаписи:
Ваша конфигурация основного.htaccess
может перезаписывать запросы на странице подкаталога, если они не обрабатываются правильно. Попробуйте изменить правила в основном.htaccess
, добавив специальный блок для подкаталога:<Directory /path/to/subdir> RewriteEngine On RewriteBase /subdir/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /subdir/index.php [L] </Directory>
Убедитесь, что путь к директории указан верно.
-
Проблема с настройками WordPress:
Убедитесь, что в админке WordPress для второго сайта в разделе "Настройки > Общие" правильно указаны URL-адреса WordPress и сайта. Они должны содержать адрес подкаталога. Например:- WordPress Address (URL):
http://domain.com/subdir
- Site Address (URL):
http://domain.com/subdir
- WordPress Address (URL):
-
Сброс пермалинков:
После внесения изменений, не забудьте сбросить настройки постоянных ссылок. Для этого перейдите на вкладку «Настройки > Постоянные ссылки» и просто нажмите «Сохранить изменения» без изменений. Это должно обновить правила перезаписи. -
Проверка модулей Apache:
Убедитесь, что у вас включен модульmod_rewrite
на сервере. Вы можете проверить это, создав файлphpinfo()
, и уверившись, чтоmod_rewrite
активен. -
Кеширование:
Если вы используете кеширование на сервере или с помощью плагинов, попробуйте очистить кеш. В некоторых случаях устаревшие данные могут вызывать проблемы с отображением новых постоянных ссылок. -
Создание поддомена:
Если у вас возникают проблемы даже после всех проверок, рассмотрите возможность создания поддомена для второго экземпляра. Это позволяет упростить конфигурацию и избежать конфликтов.
Заключение
Проблемы с постоянными ссылками являются распространенной проблемой при многопользовательском использовании WordPress. Применение вышеуказанных шагов должно помочь вам эффективно решить проблему с доступностью страниц на вашем сайте в подкаталоге. Убедитесь, что вы внимательно следуете каждой инструкции, чтобы избежать возможных ошибок. Если проблема сохраняется, возможно, потребуется обратиться к администратору хостинга для дополнительной диагностики.