Вопрос или проблема
Долгое время я вел свой блог по адресу http://www.murrayc.com/blog/, с установкой WordPress в /home/murrayc/murrayc.com/blog/. Теперь я перенес его на http://www.murrayc.com/, не перемещая установку WordPress в файловой системе.
Я сделал это следующим образом:
-
Изменил “Адрес сайта (URL)” в Настройки->Основные на http://www.murrayc.com. Я оставил “Адрес WordPress (URL)” как http://www.murrayc.com/blog
-
Добавил RedirectRule в мой верхний .htaccess в /home/murrayc/murrayc.com/, чтобы, например, permalink/something мог использоваться вместо blog/permalink/something. Старые blog/permalinks тоже, похоже, продолжают работать.
Тем не менее, некоторые старые ссылки не работают. http://www.murrayc.com/blog/ приводит на страницу, которая упоминает блоги, предположительно, через попытку WordPress угадать, что вы хотите. Точно так же http://www.murrayc.com/blog/feed выводит поток комментариев для одного старого поста в блоге.
С правилами, добавленными WordPress (после изменения “Адреса сайта URL”, я думаю), вот мой файл .htaccess:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/temp
RewriteRule ^(.*)$ blog/$1 [L]
# 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
Я использую WordPress 3.5.1, последнюю версию, через однонажатую установку Dreamhost, которая обновляется автоматически.
Это похоже на ошибку в WordPress. Возможно, он неправильно интерпретирует URL, которые он получает в какой-то момент, содержащие blog/blog.
Вы можете пропустить первую часть вашего .htaccess
, просто используйте стандартную конфигурацию WordPress.
Основная проблема в том, что вам нужно создать новый index.php
в корневом
каталоге вашего веб-пространства, содержащий следующее:
<?php
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define('WP_USE_THEMES', true);
/** Loads the WordPress Environment and Template */
require('./blog/wp-blog-header.php');
?>
Вам также нужно создать файл .htaccess
в корневом каталоге, содержащий стандартный .htaccess
для WordPress, и тогда все должно работать нормально.
Вам может понадобиться использовать 301 редиректы, так как сейчас нет каталога блога, но предполагается, что он находится в корне. Вам нужно сообщить серверу, что это старые URL и они должны соответствовать новым. Вы можете сделать это, используя .htaccess, как в коде ниже,
//301 Редирект старых файлов
Redirect 301 http://www.murrayc.com/blog http://www.murrayc.com/
Redirect 301 http://www.murrayc.com/blog/feed http://www.murrayc.com/feed
Также есть плагины для этого.
Ответ или решение
После переноса блога на корневой уровень сайта, с URL-адресом http://www.murrayc.com/, у вас могут возникнуть проблемы с доступом к старым URL-адресам, таким как http://www.murrayc.com/blog/ и http://www.murrayc.com/blog/feed/. Это связано с тем, что WordPress не может правильно перенаправлять эти старые адреса к новым, если не настроить соответствующим образом файл .htaccess и индексацию. Давайте разберемся с этой ситуацией шаг за шагом.
Настройка .htaccess
В первую очередь, важно правильно настроить файл .htaccess в корневом каталоге вашего сайта. Убедитесь, что в нем присутствуют правильные правила переписывания. Ваш текущий файл .htaccess может выглядеть следующим образом:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/temp
RewriteRule ^(.*)$ blog/$1 [L]
# 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
Тем не менее, вы можете упростить этот файл, удалив ненужные правила и добавив необходимые 301 редиректы для старых URL-адресов. Оптимизированный файл может выглядеть так:
RewriteEngine On
# 301 Перенаправление старых URL-адресов
Redirect 301 /blog/ http://www.murrayc.com/
Redirect 301 /blog/feed http://www.murrayc.com/feed
# 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
Создание index.php в корневом каталоге
Для того чтобы WordPress корректно обрабатывал запросы на новом уровне, необходимо создать файл index.php
в корневом директории сайта. Этот файл должен содержать следующий код:
<?php
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define('WP_USE_THEMES', true);
/** Loads the WordPress Environment and Template */
require('./blog/wp-blog-header.php');
?>
Использование плагинов для управления редиректами
Если вы не хотите вручную настраивать редиректы, существуют различные плагины, которые могут упростить этот процесс. Плагины для управления редиректами, такие как "Redirection" или "Simple 301 Redirects", могут помочь автоматически перенаправить старые URL на новые.
Настройка ссылок для RSS-лент
После переноса вашего блога также убедитесь, что ваше RSS-окно настроено корректно. Например, если предыдущая лента находилась по адресу http://www.murrayc.com/blog/feed, то необходимо перенаправить эту ссылку на http://www.murrayc.com/feed при помощи правила 301.
Заключение
Проблема с недоступными старыми URL-адресами после переноса блога требует точной настройки вашего .htaccess файла и правильного функционирования index.php файла в корневой папке. Не забывайте о правилах 301 редиректов, чтобы обеспечить пользователей плавным переходом к новым адресам. Эти шаги помогут вам успешно решить возникшие проблемы и улучшить SEO вашего сайта, сохраняя при этом лояльность пользователей к вашему контенту.