添加'/'会使网站崩溃

Adding a '/' makes the website crash

这是没有“/”的样子 (localhost/index.php):http://postimg.org/image/jxg239qzn/

在url(localhost/index.php/)末尾添加后: http://postimg.org/image/e01pe0isv/

任何有经验的人都可以就可能的原因给出一个简短的提示。

这是 index.php :

require_once("php/config.php");
if(substr_count($_SERVER['PHP_SELF'],'/')==1){ // fixing that bug  
    require_once( ROOT_PATH . "php/header.php" );   
    if(isvalid(quizzid()) == true){
        switch(quizzid()){
            case 0:
                require_once( ROOT_PATH . "php/questionarios.php" );
                break;
            default:
                require_once( ROOT_PATH . "php/questionario.php" ); 
                break;
         } 
     }          
     require_once(ROOT_PATH . "php/footer.php");    // footer
}else{ // if there are more than 1 '/' it would redirect to > index
    header('Location: /index.php');
}

我猜想服务器假定 "index.php" 是一个目录并寻找路径为 "localhost/index.php/index.php" 的索引文件。您是否测试过这是否可能是问题所在?

添加 / 后,包含路径从 localhost 变为 localhost/index.php/ 并在位置 localhost/index.php/php/config 搜索 config.php。 php 不存在。

因此您的 ROOT_PATH 在添加 / 后没有设置。

在包含配置时使用绝对路径(完整路径)

require_once("/php/config.php");

屏幕截图显示,当您在 URL.

末尾附加斜杠时,您的站点不会加载外部文件(CSS、JS、图像)

最可能的原因是您对外部文件使用了相对路径。

<link rel="stylesheet" type="text/css" href="style.css">

您的浏览器将尝试加载 http://localhost/index.php/style.css 而不是 http://localhost/style.css


使用外部文件的绝对路径可以解决问题。

<link rel="stylesheet" type="text/css" href="/style.css">

你也可以使用HTML中的<base> element,它会配置所有相对路径从特定目录中获取:这会影响所有CSS / JS /图像文件,因此这是比将所有相对路径更改为绝对路径更快的解决方案。

<base href="http://localhost/">

我还建议在 Apache's configuration 中将 AcceptPathInfo 设置为 Off。这将向 http://localhost/index.php/ 发出请求以获得 404 Not Found 响应。

我才意识到问题出在哪里,我为那个错误的愚蠢感到羞耻。

我曾经在任何地方包含 img、css、js 或其他任何东西,我都是这样使用的:

(之前)link rel="stylesheet" type="text/css" href="css/css.css"

(之后)link rel="stylesheet" type="text/css" href="/css/css.css"

这是一个很好回答的问题:relative path to CSS file

谢谢你,如果对我的愚蠢感到恼火,我很抱歉。

(我想在每个答案上加 1,但我需要 15 的声望。)