404找不到 - 当url以/

时间:2017-11-03 21:44:40

标签: php html css

此问题涉及我在上一个问题中提供的相同CMS和文件:PHP Local CMS CSS Error

此刻我很困惑。如果我访问http://localhost/cms/admin CSS和JS使用href(CSS)http://localhost/cms/includes/admin/CSS/panel.pages.css完美执行。但是,当我访问http://localhost/cms/admin/时(最后添加了/),href变为http://localhost/cms/admin/includes/admin/CSS/panel.pages.css

网站的任何链接都会通过.htaccess重定向到index.php:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /cms/

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule ^(.*)$ index.php/$1
</IfModule>

在index.php文件中,URL受到控制。如果路径以admin开头,则包含admin.main.php。

if (isset($_SERVER['PATH_INFO'])) {
    $request_url = $_SERVER['PATH_INFO'];

    while (substr($request_url, -1) == '/') {
        $request_url = rtrim($request_url, '/');
    }

    $explode_url = explode('/', $request_url);
    if (isset($explode_url[1]) && $explode_url[1] == 'admin') {
        require('includes/admin/admin.main.php');
    }
}

admin.main.php控制请求是/ admin / pages,如果是,则控制另一个文件。

global $request_url;

if ($request_url == '/admin/pages') {
    require('includes/admin/panel/panel.pages.php');
}

在panel.pages.php的头部:

<?php
echo <link rel='stylsheet' type='text/css' href='includes/assets/fonts/Roboto/Roboto-Thin.ttf');
echo <link rel='stylsheet' type='text/css' href='includes/admin/CSS/panel.pages.css'>
?>

编辑:我对此解决方案并不感到不满,如果您对其他方法有任何建议,请分享。

2 个答案:

答案 0 :(得分:0)

我猜你的html:

<link href="../includes/admin/CSS/panel.pages.css">

所以当你在这里时:http://localhost/cms/admin

..告诉它上升一级(至http://localhost/cms/),然后添加includes/admin/CSS/panel.pages.css,为您提供http://localhost/cms/includes/admin/CSS/panel.pages.css

当你在这里时:http://localhost/cms/admin/,它会把它视为http://localhost/cms/admin/index

之类的东西

..告诉它上升一级(至http://localhost/cms/admin/),然后添加includes/admin/CSS/panel.pages.css,为您提供http://localhost/cms/admin/includes/admin/CSS/panel.pages.css

最佳做法(IMO)是不使用(完全?)相对路径 - 您的CSS href应始终以/开头,以便它相对于文档根目录。

<link href="/cms/includes/admin/CSS/panel.pages.css">

答案 1 :(得分:0)

我相信我已经通过您的解决方案和谷歌的组合解决了这个问题。使用绝对路径是一个不错的选择,但由于CMS必须与各种文件夹和网站目录结构兼容,我不得不稍微更改该解决方案。在index.php(包括其他所有文件)的乞求中,我补充道:

$base = rtrim(rtrim($_SERVER['PHP_SELF'], $_SERVER['REQUEST_URI']), 'index.php');

在我的情况下,返回/cms/

在包含的panel.pages.php中,hrefsrc然后使用以$base变量开头的绝对路径。这使其与任何网站结构兼容。

如果我对此解决方案有误,请纠正我。