0

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

{网站}/wp-content/plugins/prodx/product?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 有问题吗?

4

3 回答 3

1

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

于 2010-05-04T20:46:42.037 回答
1

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

于 2010-04-30T17:44:44.660 回答
0

我认为问题在于 URL 太长。这里有一些很棒的信息:

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);
  }
}
于 2010-05-02T04:44:21.650 回答