Проблемы с постоянными ссылками при установке WordPress в подкаталог / подпапку
Я установил WP в подпапку /cms
, и он работает без отображения подпапки в URL. Когда я использую /%postname%/
как структуру постоянных ссылок, я получаю ошибку 404 на сайте. Мой сервер поддерживает mod_rewrite
.
Мой код
wp-config.php
define('WP_SITEURL', 'http://www.sitename.de/cms');
define('WP_HOME', 'http://www.sitename.de');
корневая директория
1) .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /cms/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /cms/index.php [L]
</IfModule>
2) index.php
<?php
define('WP_USE_THEMES', true);
require('./cms/wp-blog-header.php');
?>
/cms
1) .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
2) index.php
<?php
define('WP_USE_THEMES', true);
require('./wp-blog-header.php');
?>
Спасибо за помощь
Ogni
Что я обычно делаю
- Устанавливаю WordPress в поддиректорию.
- Открываю настройки постоянных ссылок и задаю нужную структуру.
- Перехожу в Настройки → Общие
- Удаляю название поддиректории из поля 'Адрес сайта (URL)'
- Вырезаю файлы index.php и .htaccess из поддиректории и вставляю их в корень
- Изменяю код в index.php, как вы сделали.
- Снова захожу в Настройки → Постоянные ссылки и сохраняю форму
Готово. Вам больше не нужны файлы index.php и .htaccess в поддиректории.

Как ни странно, это противоречит тому, что указано в кодексе Выделение_WordPress_в_отдельную_директорию. Там говорится о необходимости сохранять копии обоих файлов: index.php
и .htaccess
. Может быть, у вас есть подсказка по этому поводу?
Примечание: я не эксперт по .htaccess
, и мне до сих пор не совсем понятно, как должны выглядеть эти файлы в каждой папке.

У меня была похожая проблема, и она была не в коде, а в файле httpd.
- Откройте файл конфигурации Apache, расположенный по адресу /etc/httpd/conf/httpd.conf (или apache.conf для Ubuntu).
- Измените параметр AllowOverride None на AllowOverride All внутри директивы Directory для DocumentRoot, обычно это выглядит так:

мое решение этой проблемы, которое всегда работает в моем случае:
создайте файл .htaccess в поддиректории и добавьте код, который генерируется при изменении постоянных ссылок внизу страницы.
пример сгенерированного кода:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /kimco/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /kimco/index.php [L]
</IfModule>

если вы определяете URL сайта и домашний URL в wp-config, то что бы ни было в базе данных, оно будет проигнорировано

@Milo: Это верно
Когда я обновляю постоянные ссылки (в админке WordPress), корневой .htaccess выглядит так: .. RewriteBase /
... RewriteRule . /index.php [L]
, но я думаю, он должен выглядеть так: ... RewriteBase /cms
... RewriteRule . /cms/index.php [L]
