Проблемы с постоянными ссылками при установке 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, и мне до сих пор не совсем понятно, как должны выглядеть эти файлы в каждой папке.
superjos
У меня была похожая проблема, и она была не в коде, а в файле 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
@Milo: Это верно
Когда я обновляю постоянные ссылки (в админке WordPress), корневой .htaccess выглядит так: .. RewriteBase / ... RewriteRule . /index.php [L], но я думаю, он должен выглядеть так: ... RewriteBase /cms ... RewriteRule . /cms/index.php [L]
ogni