无法在wp-content下调用WordPress插件文件

时间:2010-04-30 17:10:21

标签: wordpress apache2 http-status-code-404 wordpress-plugin httpd.conf

我的客户有很多博客客户。这些WordPress博客中的每一个都调用一个提供产品链接的插件。组成链接的方式如下:

{网站} /可湿性粉剂内容/插件/ prodx /产品?ID = 432320

这适用于所有博客,除了两个。在这两个上,当您尝试调用URL时,您将获得404。

所以,我禁用了除prodx之外的所有插件并将主题恢复为默认值(Kubrick),认为使用add_action()API进行插件拦截时可能会执行此操作,例如拦截URL并重定向它们。但是,这没有用。

因此,我将WordPress升级到最新版本。再一次,没有解决。

所以,我检查了权限,与一个工作正常的博客进行比较。再一次,没有解决。

所以我用一个工作博客中的一个取代了.htaccess。再一次,没有解决。

所以我用一个与这个相同的工作博客替换了所有文件,然后恢复了wp-config.php文件,以便它与正确的博客数据库交谈。再一次,没有解决。

与一个完美的博客相比,我再次仔细检查了权限。再一次,没有解决。

所以,我创建了一个看起来像这样的test.php:

<?php

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

然后我将它复制到另一个插件文件夹并使用我的浏览器进入它 - 再次,404。所以我将它复制到wp-content / plugins的根目录并尝试在那里调用它 - 再次,404。所以我把它复制到wp-content中 - 再次,404。最后,我把它复制到WordPress博客网站的根目录,这一次,它有效!

没有意义。

我开始认为这个客户的/etc/httpd/conf/httpd.conf可能会发生一些事情,但我在这个客户看到的唯一不同的是IP地址与客户的博客不同有效。每个客户都在我的客户建立的环境中获得自己的IP。

我的客户端系统也很困惑。

您认为怎么回事?这个客户的WP数据库有什么问题吗? httpd.conf中有什么问题吗?

3 个答案:

答案 0 :(得分:1)

您可以使用phpmyadmin检查WP选项表中插件选项中的错误网址(并比较每个博客选项的其他方面),这些网址可能已在您的主机上提供,或者作为插件检查:WordPress › Portable phpMyAdmin « WordPress Plugins 。或者使用“清理选项”删除插件选项以完全“重置”插件(如果插件使用选项):Clean Options « WordPress Plugins

答案 1 :(得分:1)

您应该查看服务器的错误日志,应该有一个解释。如果没有,打开调试级别等。那说,插件真的不应该链接到插件目录中的文件,它应该使用wordpress重写类http://codex.wordpress.org/Function_Reference/WP_Rewrite

答案 2 :(得分:0)

我认为问题是网址太长了。这里有一些很好的信息:

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

由于某种原因,博客得到了404而不是413。

解决方法是我使用gzcompress来缩短我的长产品ID(这是一个隐形URL),然后是bin2hex。所以我像这样制作了网址:

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);
  }
}