【问题标题】:Why is my file found in my local environment, but 404s on my cpanel server?为什么在我的本地环境中找到我的文件,但在我的 cpanel 服务器上找到 404?
【发布时间】:2014-05-10 03:57:28
【问题描述】:

为什么这在我的本地环境中起作用,但在我运行 cpanel 的生产服务器上却出现 404:

$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 cal 操作之后出现的)

[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

【问题讨论】:

  • object_name.template_url返回本地和在线什么?
  • 在生产中根本找不到文件,我什至无法在浏览器中提取文件。但是我在本地环境中的浏览器中提取文件
  • 您可能需要包含您的 .htaccess。可能有一些重写会使您的文件变成 404。
  • 将永久链接设置为“默认”,然后尝试。
  • @MichalS,我只是将它们更改为默认值,但它仍然无法正常工作,但这次我的控制台给了我 500 错误。尝试通过浏览器访问这些文件会将我带到首页。也就是说,我的本地环境中的永久链接没有设置为默认值,我在那里没有这个问题。

标签: javascript php ajax wordpress http-status-code-404


【解决方案1】:

将 .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(). 

也许这里的瀑布测试也可能对优化有所帮助。 Web Page Test

最后,在浏览页面时,我注意到谷歌地图的加载时间很长——仔细检查以确保它以正确的顺序加载(通常是最后一个),并且它被调用使用当前的 API 正确。 - 除此之外......有时谷歌只是很慢,但主要是由于一些脚本问题 - 地图仍然会呈现,但其他事情没有正确设置,因此脚本的链加载在某处失败。这也可能导致在 WordPress 等环境中特别难以排除故障的 404。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      尝试将此添加到您的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”。然后尝试。这将起作用

      【讨论】:

        【解决方案4】:

        在我看来,这似乎是一个用户问题 - 很可能,您服务器上该文件夹中的所有文件都有一个不是 www-data 的用户;因此apache 无法访问这些文件并将其提供给您。

        您能否检查一下,并尝试将 usernamegroup 更改为 www-data 使用

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

        编辑 1

        我检查了您网址上的其他一些PHP 文件,所有这些文件都给出了 404。示例:

        在我看来,您的 php 文件都没有工作。因此,这通常是 PHP 的错误配置问题,而不是该文件夹中文件的特定问题。

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

        浏览apache日志,贴出相关部分,方便我们进一步调试。

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

        【讨论】:

        • 我以为我昨天回复了这个,猜想它只是草拟的 - 我检查了我本地环境的所有权,它们确实是 www-data。我看不到它们在我的生产环境中是什么,但我的 FTP 客户端显示了一系列数字。不确定那些代表哪个用户。但是,为了确定,我将文件权限更改为 755,因此任何使用都应该能够读取和执行这些文件。依然没有。我会在我原来的帖子中发布我的 .htaccess
        • @rugbert 该用户对所有文件都相同吗?例如,在您的 FTP 客户端中,您能否看到一个用户访问一组文件,而另一个用户访问另一组文件?另外,文件更改后您是否重新启动了 apache?
        • @rugbert 您的.htaccess 看起来不错,我认为这不是问题所在。您的 PHP 文件都不起作用,请检查我的答案的编辑。
        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 2021-05-01
          • 1970-01-01
          • 2012-01-12
          • 1970-01-01
          • 1970-01-01
          • 2021-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多