вторник, 7 июля 2009 г.

Доработка напильником wordpress в Debian

Сегодня попробовал зайти на свой домашний сервак со внешки по HTTP и увидел облом: Wordpress показывал сообщение об ошибке 404 и дополнял их парой строчек с ошибками PHP.

Поковырялся внутри, оказалось что это делает файл /etc/wordpress/wp-config.php. Его содержимое было таким:

<?php
/** WordPress's Debianised default master config file
Please do NOT edit and read about how the configuration works in the README.Debian
**/

#http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=435289
#http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=440572 (underscores, not dashes)
$debian_server = preg_replace('/:.*/', "", $_SERVER['HTTP_HOST']);
$debian_file = '/etc/wordpress/config-'.strtolower($debian_server).'.php';

if (!file_exists($debian_file)) {
header("HTTP/1.0 404 Not Found");
echo "404 Not found";
}

require_once($debian_file);

define('ABSPATH', '/usr/share/wordpress/');

require_once(ABSPATH.'wp-settings.php');
?>

Wordpress по умолчанию настроен на виртуальный хостинг. То есть, он выбирает конфигурационный файл в зависимости от того домена, к которому обратился HTTP-клиент. По замыслу мэнтейнера, как я понял, в случае отсутствия такого конфига, должна показываться страница с текстом "404 Not found". Однако что-то он не добдел и после вывода этого текста обработка продолжается. Подключаются дополнительные php-файлы, которые и выдают ошибку.

Чтобы просто убрать эту ошибку, можно добавить в текст файла одну строчку. Например так:

<?php
/** WordPress's Debianised default master config file
Please do NOT edit and read about how the configuration works in the README.Debian
**/

#http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=435289
#http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=440572 (underscores, not dashes)
$debian_server = preg_replace('/:.*/', "", $_SERVER['HTTP_HOST']);
$debian_file = '/etc/wordpress/config-'.strtolower($debian_server).'.php';

if (!file_exists($debian_file)) {
header("HTTP/1.0 404 Not Found");
echo "404 Not found";
exit(1);
}

require_once($debian_file);

define('ABSPATH', '/usr/share/wordpress/');

require_once(ABSPATH.'wp-settings.php');
?>

Теперь всё должно работать, как и было задумано. Однако я не остановился на достигнутом и решил сделать переадресацию на dokuwiki-страницу.

Для начала я создал простую переадресующую страницу /etc/wordpress/index.html:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv=refresh content="0; url=/dokuwiki/">
</html>

И поправил злополучный обработчик Wordpress /etc/wordpress/wp-config.php таким образом:

<?php
/** WordPress's Debianised default master config file
Please do NOT edit and read about how the configuration works in the README.Debian
**/

#http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=435289
#http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=440572 (underscores, not dashes)
$debian_server = preg_replace('/:.*/', "", $_SERVER['HTTP_HOST']);
$debian_file = '/etc/wordpress/config-'.strtolower($debian_server).'.php';

if (!file_exists($debian_file)) {
include('/etc/wordpress/index.html');
exit(0);
}

require_once($debian_file);

define('ABSPATH', '/usr/share/wordpress/');

require_once(ABSPATH.'wp-settings.php');
?>

Теперь при заходе на http://stupin.homelinux.org/ сначала происходит переход в http://stupin.homelinux.org/wp/, а затем в http://stupin.homelinux.org/dokuwiki/

1 комментарий:

  1. Может быть стоит переместить это в технический блог?

    ОтветитьУдалить