Неожиданная проблема возникла при переезде на другой хостинг.
WordPress после включения ЧПУ(permalinks) показывал только 404-ю ошибку, причём, даже на главной.
За неделю были выкурены все конфиги апача и php, но решение найдено не было и пришлось шаг за шагом разбирать что же там делает вордпресс, и почему отдаёт ошибку.
.
В итоге, зацепился за то, что параметры home и siteurl после установки нового вордпресса выглядят так: “http://site.ruhttp://site.ru”, когда должны быть “http://site.ru”.
.
Ещё немого поисков, и оказывается, что за формирование этого параметра отвечает функция “wp_guess_url()“, которая находится в файле “wp-includes/functions.php“.
.
Самая интересная строка в ней:
$url = preg_replace('|/wp-admin/.*|i', '', $schema . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
Собственно, всё отлично и должно работать. Но посмотрев что возвращает каждый из параметров оказалось, что REQUEST_URI отдаёт полный путь вместе с доменом, т.е. выглядит примерно так: “http://site.ru/some_path”, когда в документации написанно, что должен быть путь без домена: “/some_path”!
.
Желания искать причину бага уже не было(да и гугл выдаёт всего пару случаев, без решения) был быстро написан простой костыль, состоящий из двух файлов: .htaccess и req_url.php.
.htaccess:
php_value auto_prepend_file /full/path/req_url.php
.
req_url.php:
<?php $_SERVER['REQUEST_URI']=str_replace("http://".$_SERVER["HTTP_HOST"],"",$_SERVER['REQUEST_URI']); $_SERVER['REQUEST_URI']=str_replace("https://".$_SERVER["HTTP_HOST"],"",$_SERVER['REQUEST_URI']); ?>
Здесь в htaccess указанно правило, которое обязывает в начале всех скриптов запускать req_url.php, в котором, в свою очередь, написан простой фикс серверной переменной.
.
Оба эти файла находятся в корне папки с сайтами, дабы на всех сайтах всё отлично работало.
.
Похожие записи:
февраля 24, 2012 at 13:42
Спасибо! Столкнулся с такой же фигнёй, при переезде…
мая 6, 2012 at 13:29
Я вообще стараюсь не заморачиваться с .htaccess , не очень дружу с ним)))