为什么我的文件在我的本地环境中找到,但在我的cpanel服务器上找到了404


Why is my file found in my local environment, but 404s on my cpanel server?

为什么这在我的本地环境下工作,而在我的生产服务器上运行cpanel:

$adminDir = get_bloginfo('template_directory');  
$adminDir = $adminDir."/lib/admin/";
$preview_file = $adminDir.'functions/live_preview.php';
wp_register_script( 'admin', $adminDir."js/admin.js", false, '1.0' ); //register script
$wp_paths = array( 'template_url' => $adminDir.'functions/live_preview.php');
wp_localize_script( 'admin', 'object_name', $wp_paths );
wp_enqueue_script("admin");

我不确定还需要提供什么信息,我在本地运行的是ubuntu和apache,我知道我的生产环境运行的是一些带有apache的linux。我有一些JS发送一个ajax请求的问题的页面:

    $.ajax({
        url: object_name.template_url,
        type: 'POST',
        data: { data: data },
        success: function(result) {
            kjd_reload_styles();
        }
    });

我在本地环境中没有得到任何错误,但是我的ajax响应在生产环境中导致404。为什么呢?

BUMP -所以有问题的文件是:

http://sandbox.kylejenningsdesign.com/wp-content/themes/bootstrappedWP/lib/admin/functions/live_preview.php

尝试点击,失败为404。但是如果你去它的父目录:

http://sandbox.kylejenningsdesign.com/wp-content/themes/bootstrappedWP/lib/admin/functions

您可以看到文件列表(顺便说一下,所有的文件都是404)。这是怎么回事?

这是我的。htaccess文件,它看起来像标准的wordpress。htaccess:
# BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index'.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>
# END WordPress

新增错误日志:

我检查了我的cpanel错误日志,下面是我发现的。有两种类型的日志,一种显示最近的300条日志,还有一种更深入的日志。基本日志只显示这个(实际上,这个错误在今天我的ajax调用操作之后出现)

[Sat Apr 19 18:30:43 2014] [error] [client 76.100.35.2] SoftException in Application.cpp:629: Directory "/home/kylejenn/public_html/sandbox/wp-content/themes/bootstrappedWP/lib" is writeable by group, referer: http://sandbox.kylejenningsdesign.com/wp-admin/admin.php?page=kjd_header_settings
un Apr 20 15:31:49 2014] [error] [client 173.71.202.111] SoftException in Application.cpp:629: Directory "/home/kylejenn/public_html/sandbox/wp-content/themes/bootstrappedWP/lib" is writeable by group, referer: http://sandbox.kylejenningsdesign.com/wp-admin/admin.php?page=kjd_body_settings

**The in depth error logs show:**
[18-Apr-2014 15:15:36 UTC] WordPress database error MySQL server has gone away for query SELECT option_value FROM wp_options WHERE option_name = '_transient_doing_cron' LIMIT 1 made by _get_cron_lock

[19-Apr-2014 20:04:48 UTC] WordPress database error Unknown column 'z6p9z9mlt_posts.post_type' in 'where clause' for query SELECT z6p9z9mlt_comments.* FROM z6p9z9mlt_comments  WHERE comment_post_ID = '206' AND comment_approved = '1' AND z6p9z9mlt_posts.post_type NOT IN('project', 'task_list', 'task', 'milestone', 'message')  ORDER BY comment_date_gmt DESC LIMIT 10 made by require('wp-blog-header.php'), wp, WP->main, WP->query_posts, WP_Query->query, WP_Query->get_posts

将。htaccess文件放到http://sandbox.kylejenningsdesign.com/wp-content/themes/bootstrappedWP/lib/admin/functions/中,其中只有以下内容

RewriteEngine Off

同样,没有RewriteBase /声明,wordpress工作得很好:

# BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^index'.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>
# END WordPress

我还注意到以下问题(可能与…有关)也许不是)

Invalid App Id: Must be a number or numeric string representing the application id. all.js:53
FB.getLoginStatus() called before calling FB.init(). 

也许这里的瀑布测试也可能对优化有所帮助。网页测试

最后,当浏览到页面时,我注意到谷歌地图需要很长时间才能加载-仔细检查以确保它以正确的顺序加载(通常最后),并且它正在使用当前的API被正确调用。——除此之外……有时Google只是很慢,但主要是由于一些脚本问题——地图仍然可以渲染,但其他东西没有正确设置,所以脚本加载链在某些地方失败了。这也可能导致404,在WordPress等环境中,这尤其难以排除。

从Wordpress 2.6开始,函数get_bloginfo('template_directory')返回一个URI,但是你可能需要一个本地路径。尝试使用函数get_theme_root()代替。在任何情况下,如果您想检查计算机和服务器之间的ajax通信,我建议您使用网络协议分析器。我更喜欢Wireshark(它也适用于linux),但你可以选择另一个。

尝试将此添加到您的functions.php,

      /*
 * Allows access to Ajaxurl from Front end
 */
if (!function_exists('add_ajaxurl_to_front')) {
    function add_ajaxurl_to_front() {
        ?>
        <script type="text/javascript">
            //<![CDATA[
            ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
            //]]>
        </script>
        <?php
    }
}
add_action('wp_head', 'add_ajaxurl_to_front', 1);

然后将url源改为"url:ajaxurl"。然后尝试。

这在我看来像是一个用户问题-最有可能的是,在您的服务器上的文件夹中的所有文件有一个用户以外的www-data;因此,apache不能访问这些文件并将它们提供给您。

你可以检查相同的,并尝试使用

usernamegroup更改为www-data
cd wp-content/themes/bootstrappedWP/lib/admin/
sudo chown -r www-data:www-data functions 

编辑1

我检查了你的url上的其他一些PHP文件,它们都给出了404。例子:

  • http://sandbox.kylejenningsdesign.com/wp-content/themes/bootstrappedWP/lib/admin/shortcode_window.php
  • http://sandbox.kylejenningsdesign.com/wp-content/themes/bootstrappedWP/lib/admin/init.php
  • http://sandbox.kylejenningsdesign.com/wp-content/themes/bootstrappedWP/lib/admin/kjd_fields.php
  • http://sandbox.kylejenningsdesign.com/wp-content/themes/bootstrappedWP/lib/partials/image_slider_wrapper.php

在我看来,你的php文件都不工作。因此,这是PHP的一般配置错误问题,而不是该文件夹中的文件的特定问题。

你能检查你的php.ini设置(如果可访问)是否工作正常吗?另外,如果在代码中连接到任何数据库,数据库本身是否可访问?

浏览apache日志,并发布相关部分,以便我们可以进一步调试情况。

另外,每次更改配置时不要忘记重新启动apache

设置下面文件夹的权限为0755,然后尝试…

/wp-content/themes/bootstrappedWP/lib/admin/functions