Невозможно вызвать файлы плагинов WordPress под wp-контентом - PullRequest
0 голосов
/ 30 апреля 2010

У меня есть клиент, у которого много клиентов в блогах. Каждый из этих блогов WordPress вызывает плагин, который предоставляет ссылку на продукт. Способ составления ссылки выглядит следующим образом:

{сайт} / WP-содержание / плагины / prodx / продукт? ID = 432320

Это прекрасно работает на всех блогах, кроме двух. На этих двух, когда вы пытаетесь позвонить по URL, вы получаете 404.

Итак, я отключил все плагины, кроме prodx, и вернул тему по умолчанию (Kubrick), подумав, что, возможно, перехват плагинов с помощью API add_action (), например перехват URL-адресов и их перенаправление. Однако это не помогло.

Итак, я обновил WordPress до последней версии. Опять не исправил.

Итак, я проверил разрешения, сравнивая с блогом, который работал просто отлично. Опять не исправил.

Поэтому я заменил .htaccess, используя один из рабочего блога. Опять не исправил.

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

Опять я тщательно проверил разрешения, сравнивая с отлично работающим блогом. Опять не исправил.

Итак, я создал test.php, который выглядит так:

<?php

print_r($_GET);
echo "hello world";

Затем я скопировал его в другую папку плагинов и использовал свой браузер, чтобы добраться до него - снова 404. Поэтому я скопировал его в корень wp-content / plugins и попытался вызвать его там - снова 404. Поэтому я скопировал его в wp-контент - снова 404. Наконец, я скопировал его в корень сайта блога WordPress, и на этот раз он заработал!

Не имеет смысла.

Я начал думать, что, возможно, что-то происходит с /etc/httpd/conf/httpd.conf для этого клиента, но единственное, что я видел в его клиенте, было то, что IP-адрес отличался от блога клиента это сработало. Каждый клиент получает свой IP в этой среде, созданной моим клиентом.

Мой клиентский сисоп тоже сбит с толку.

Как вы думаете, что происходит? Что-то не так в базе данных WP для этого клиента? Что-то не так в httpd.conf?

Ответы [ 3 ]

1 голос
/ 05 мая 2010

Вы должны заглянуть в журнал ошибок вашего сервера, там должно быть объяснение. Если нет, включите уровни отладки и т. Д. При этом плагин действительно не должен ссылаться на файл в директории плагинов, он должен использовать класс переписывания wordpress http://codex.wordpress.org/Function_Reference/WP_Rewrite

1 голос
/ 30 апреля 2010

Вы можете проверить наличие плохих URL в опциях плагинов в таблице опций WP с помощью phpmyadmin (и сравнить другие аспекты опций каждого блога), которые могут быть уже доступны на вашем хосте или в качестве плагина: WordPress › Портативный phpMyAdmin «Плагины для WordPress . Или удалите параметры плагинов с помощью «Очистить параметры», чтобы полностью «сбросить» плагин (если плагин использует параметры): Очистить параметры «Плагины WordPress

0 голосов
/ 02 мая 2010

Я думаю, что проблема была в том, что URL был слишком длинным. Вот отличная информация об этом:

http://www.boutell.com/newfaq/misc/urllength.html

И почему-то блог получал 404 вместо 413.

Исправлено то, что я использовал gzcompress для сокращения длинного идентификатора продукта (который был скрытым URL), а затем bin2hex. Поэтому я сделал URL-адрес примерно так:

http://myblog.com/item/789ccb282929b0d2d72f2f2fd7cb4ac92fcc4faed44bcecfd54fcec94cced63536373334b730d7353430333334b530b60f0df2b1cd00ea503576543572032290befcb2d4a2e292fce46c904e90b0b15b1a50854b9aaa915980a3bb2b901910e4ef12ea1c0214f00f0ef60e058a181a199b5b18999b0100194725b4

Оттуда, мой плагин добавил обработчик инициализации, чтобы перехватить URL, проверить его и перенаправить. Эта функция выглядит следующим образом:

add_action('init','hijackURL');

function hijack_URL() {
  $sURL = $_SERVER['REDIRECT_URL'];
  if (empty($sURL)) {
    $sURL = $_SERVER['REQUEST_URI'];
  }
  if (strpos(' ' . $sURL, '/item/')>0) {
    $sID = str_replace('/item/','',$sURL);
    $sID = trim($sID);
    if (empty($sID)) {
      require('../../../wp-blog-header.php');
      $sBlogURL = get_bloginfo('wpurl');
      header('HTTP/1.1 302 Moved Temporarily');
      header("Location: $sBlogURL");    
      exit(0);
    }
    $sID = pack('H*', $sID);
    $sURL = gzuncompress($sID);
    header('HTTP/1.1 302 Moved Temporarily');
    header("Location: $sURL");  
    exit(0);
  }
}
...