一些插件在url后添加完整的服务器路径(带有定制的wp-content文件夹)

时间:2012-07-22 作者:Craig

安装Wordpress SEO(少数其他插件,但不是所有插件)会出现以下控制台错误:

GET http://craigmdennis.com/content/plugins/nfs/c08/h04/mnt/152547/domains/craigmdennis.com/html/content/plugins/wordpress-seo/js/wp-seo-admin-global.js?ver=1.2.5 404 (Not Found)
出于某种原因,它在我的url后面列出了完整的服务器路径。看起来好像/nfs/c08/h04/mnt/152547/domains/craigmdennis.com/html/content/plugins/http://craigmdennis.com/content/plugins/ url中不应存在。

以下是目录结构(请注意自定义内容目录):

wp/
content/
content/themes/
content/plugins/
.htaccess
index.php
wp-config.php
我不是在运行MU。我还有一个媒体子域(不应该影响问题,但我列出它是为了完整性)

以下是我的wp配置的相关部分。php文件:

define(\'WP_SITEURL\', \'http://\' . $_SERVER[\'SERVER_NAME\'] . \'/wp\');

define(\'WP_HOME\',    \'http://\' . $_SERVER[\'HTTP_HOST\']);

define(\'WP_CONTENT_DIR\', $_SERVER[\'DOCUMENT_ROOT\'] . \'/content\');

define(\'WP_CONTENT_URL\', \'http://\' . $_SERVER[\'SERVER_NAME\'] . \'/content\');
有人知道这里发生了什么吗?谢谢

[编辑]我认为这与__FILE__ 而不是DOCUMENT\\u ROOT,因为所有插件都使用__FILE__ 获取目录名。这提供了/nfs/c08/h04/mnt/ 而不是/home/.

当我回显plugins_url() 我明白了/home/152547/domains/dev.craigmdennis.com/html/content/plugins 这是正确的,但当我经过的时候FILE 作为参数,我得到上述/nfs/c08/h04/mnt/152547/domains/dev.craigmdennis.com/html/content/plugins/{plugin-folder}.

这是否与PHP解析别名有关__FILE__ 这可以解释为什么它可以在我的本地服务器上工作(没有别名),而不能在Media Temple上工作(可能是别名/nfs/c08/h04/mnt/ 对于/home/这是Wordpress问题还是我的服务器上的问题?

2 个回复
最合适的回答,由SO网友:Craig 整理而成

该错误是php__FILE__ 解析服务器上的任何别名或符号链接。

解决方案是设置define(\'WP_CONTENT_DIR\', dirname(__FILE__) . \'/content\'); 因此,它也是解析别名后服务器上的绝对文件路径。

请参见:http://php.net/manual/en/language.constants.predefined.php#104842

SO网友:KalenGi

假设js位置确定如下:

$js_location = WPSEO_URL . \'js/wp-seo-admin-global.js\'
其中:

WPSEO_URL = WP_PLUGIN_URL . \'/\' . <WP_SEO_PLUGIN_PATH> . \'/\'
我怀疑问题在于<WP_SEO_PLUGIN_PATH>. 该值由函数中的代码确定plugins_url() 在中找到wp-includes\\link-template.php

如果调试该函数,它可能会给出<WP_SEO_PLUGIN_PATH> 正在生成错误的值:\'nfs/c08/h04/mnt/152547/domains/craigmdennis。com/html/content/plugins/wordpress搜索引擎优化\'

结束

相关推荐

从非核心php文件访问BloInfo、Get_Option和plugins_url

我正在创建一个插件,插件目录中有一个php文件,可以通过自定义重写url直接访问该文件。我需要这个文件能够使用标题中提到的三个功能。目前,我正在包括wp负载。php文件,它使我能够访问所有这些函数。然而,我一直在读到不应该包括wp负载,因为它可能不总是在同一个位置,而且它包括可能不需要的wordpress文件。这就是我如何包含wp负载:$wp_base = explode($_SERVER[\'PHP_SELF\'], $_SERVER[\'SCRIPT_FILENAME\']); require