【问题标题】:Htaccess file - 404 page not found on some foldersHtaccess 文件 - 在某些文件夹中找不到 404 页面
【发布时间】:2016-05-01 16:04:20
【问题描述】:

我正在使用 codeigniter,但我的日志文件中不断出现这些 404 错误。

ERROR - 2016-04-30 16:41:15 --> 404 Page Not Found: Assets/js
ERROR - 2016-04-30 16:41:15 --> 404 Page Not Found: Assets/js
ERROR - 2016-04-30 16:41:18 --> 404 Page Not Found: Assets/js

因此,每次页面加载都会导致日志文件中出现上述错误。我的 htaccess 文件如下所示。这里出了什么问题?

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ index.php?/$1 [L]

    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ index.php?/$1 [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]


    RewriteCond $1 !^(index\.php|assets|myadmin|robots\.txt)
    RewriteRule ^(.*)$ index.php?/$1 [L]

</IfModule>
<IfModule !mod_rewrite.c>
    ErrorDocument 404 /index.php
</IfModule>

我可以确认assets/js 是有效文件夹。

【问题讨论】:

    标签: .htaccess codeigniter


    【解决方案1】:

    您是否能够通过网络路径访问您的资产文件夹?例如http://localhost/assets(如果您的网络服务器中没有启用索引,请尝试检索文件,例如http://localhost/assets/css/style.css),它会加载吗?

    如果正在加载,您可能会在不使用基本路径的情况下调用资源,这意味着视图正在尝试直接从其自己的文件夹中调用。

    使用 site_url() 是一个非常好的步骤(url 助手)...我敦促您通过制作一个简单的助手并将其添加到包含(类似)以下内容的自动加载中,让您的资产调用更轻松:

    if (!function_exists('assets'))
    {
    /**
     * Base asset directory call
     */
    function assets($var)
    {
        $CI =& get_instance();
        $CI->load->helper('url');
    
        return site_url('assets') . '/' . $var;
    }
    }
    

    然后你会在你的视图中调用它:

    <!-- load CSS -->
    <link href="<?php echo assets("css/bootstrap.min.css") ?>" rel="stylesheet">
    

    它会在渲染后显示:

    <link href="http://localhost/assets/css/bootstrap.min.css" rel="stylesheet">
    

    不过,这只是一个非常基本的示例,如果您有大量资产要在页眉或页脚中调用,我建议您创建一个基于配置文件加载的帮助程序,您还可以指定特定页面所需的内容也以这种方式加载,因此它使用 foreach 动态加载。

    还要小心调用资产(大写字母)与资产(无大写字母)非常不同,许多网络服务器都区分大小写...

    我为我的 htaccess 文件运行以下命令:

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
    </IfModule>
    

    【讨论】:

    • 您好,感谢您的回答。是的,我可以直接访问资产文件夹(禁用默认目录索引后)。是的,我在没有基本 url 的视图文件中引用了 /assets/css/styles.css 或 /assets/js/filename.js 等。但是,我认为这不是主要问题吗?我尝试将 base_url 放到这些引用中,但似乎没有帮助???
    • 当我查看网页的源代码时,所有对 /assets/js 的引用现在都带有基本 url,但我的日志文件中仍然有两个错误日志条目,用于找不到 Assets/js??跨度>
    • 我添加了运行没有问题的 htaccess 文件,我认为也许“RewriteBase /”也可能会导致问题,请考虑将其作为第一步删除
    • 我建议在启用开发者控制台的情况下浏览您的网站并打开“网络”选项卡,查看哪些确切的文件无法找到控制器/视图,这还会告诉您哪些资产无法找到(拼写错误,旧文件未使用)。未能在所有文件中搜索“资产/js”链接并找到用法并确保正确
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多