0

我正在处理一些我不理解的奇怪行为。

所以如果我输入:

http://localhost/site/index.php

http服务器会返回一个完全没有问题的页面,index.php后面的斜线会生成一个没有任何样式的页面!

http://localhost/site/index.php/

我该如何解决这个问题?

下面的 CSS 链接不起作用,为什么?

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

这将适用于斜线,但如果我在斜线之后添加一些东西,那么我会得到所有没有样式的网站。

<link rel="stylesheet" type="text/css" href="http://localhost/site/index.php/css/fonts.css" />

编辑:

使用此功能在 href 上添加完整路径后,所有请求的 url 都可以:

function baseUrl(){
    return ("http://".$_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']));
}

无论如何,我已经在 .acccess 中添加了一些规则,所以现在我不能在 index.php 之后输入斜杠,但是如果我在斜杠之后输入一些东西,一切都会崩溃:(

4

4 回答 4

0

Apache 没有任何问题。您的文档使用的是相对 URL。

例如,您指定href="myimage.png"而不是/myimage.png

更改基本 URL 会破坏这些相对 URL。

于 2013-01-09T22:51:39.027 回答
0

这可能是您的 css 中的绝对路径和相对路径存在问题<link />。确保使用绝对路径。

于 2013-01-09T22:51:39.953 回答
0

检查您的<link />标签href属性和<img />标签src属性是否带有/

坏的:

<link rel="stylesheet" type="text/css" href="css/style.css" />
<img src="img/image.png" />

好的:

<link rel="stylesheet" type="text/css" href="/css/style.css" />
<img src="/img/image.png" />

这样您就可以确定浏览器将计算正确的路径。

于 2013-01-09T22:51:42.397 回答
0

这可能与您如何定义对 CSS、图像等的引用有关。如果它们被定义为相对路径,那么您可能本质上是在错误的目录中寻找它们。

您可能将 Apache 设置为忽略尾部斜杠(并且只提供 index.php 而不是在 index.php 目录中查找索引文件)。然而,客户端浏览器不知道这一点,并认为它正在引用名为 index.php 的目录中的某些内容并查找与该目录相关的这些文件。

要更正此问题,您应该将 Apache 配置为不忽略尾部斜杠(并给出适当的 404 错误),或者实施重写规则来清理尾部斜杠。

于 2013-01-09T22:54:08.110 回答