添加'/'会使网站崩溃
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 的声望。)
这是没有“/”的样子 (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 的声望。)