7

这是一个结构示例:

/main
 /css
  style.css
 /include
  article1.php
  article2.php
 header.php
 index.php

在我的 header.php 中,我有以下 CSS 代码:

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

而且,例如,在我的 index.php 中,我将以下内容作为第一行:

<?php include 'header.php'; ?>

现在,一切正常。接下来我将在 article1.php 文件中插入以下代码:

<?php include '../header.php'; ?>

内容(菜单和其他 html)已正确显示,但 CSS 根本不会显示/识别。基本上发生的事情是包含头文件,但服务器不尊重目录父级。为了正确显示 CSS,我必须将link relfor CSS更改为../css/style.css,但如果我这样做,它将不适用于位于主目录中的文件。

我希望我把我的问题说清楚了。我究竟做错了什么?如何包含来自不同目录的文件并保留其中的链接?

4

8 回答 8

20

在您网站的<head>部分中,插入具有该属性<base>元素。href将该href属性设置为您网站的基本 URL,所有相关请求都将通过该基本 URL 发送。

<base href="http://my-website-url.com/" />
<link rel="stylesheet" type="text/css" href="css/style.css" />

使用正确设置的base标签,用户的浏览器将尝试从 URL 加载您的样式表http://my-website-url.com/css/style.css

注意:这不仅会影响样式表,还会影响文档中的所有相关链接。

于 2013-03-28T14:39:06.803 回答
15

它与路径在包含中的工作方式有关。我建议尽可能从 doc 根目录中查找内容。

<?php include( $_SERVER['DOCUMENT_ROOT'] . '/header.php' ); ?>

这将适用于您的任何文件。

于 2013-03-28T13:46:46.293 回答
5

而不是使用相对路径:

href="css/style.css"

使用来自 webroot 的绝对路径:

href="/css/style.css"
于 2013-03-28T13:48:16.170 回答
3

您应该从根目录包含您的 css 文件。所以 /css/style.css 所以它总是从根开始,然后从那里向下。我相信这应该在所有情况下都能解决您的问题。

于 2013-03-28T13:46:54.490 回答
3

首先,问题在于您指向 CSS 文件的链接是错误的。最好的办法是查看页面中 HTML 的输出(查看源代码)。所以让我们分解一下(表格 index.php):

Index.php位于domain.tld/index.php。您的 css 文件位于domain.tld/css/*. 查看索引文件时,您的标题是

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

之所以有效,是因为您位于目录(或根目录)的顶部,并且链接是相对于该目录建立的。现在当你上升到 时domain.tld/include/article1.php,你不再是根。它正在尝试访问:

domain.tld/include/css/style.css

这意味着您必须建立完整的链接或更改您的亲戚。由于CSS位于根目录,因此简单的方法就是使用以下内容

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

这意味着它将查看 css 目录的域根目录domain.tld/css/styles.css。如果您的顶级目录是/main,请使用/main/css/styles.css

于 2013-03-28T13:51:13.580 回答
2

使用已被称为包含的文件中的相对包含始终是一个问题,每次指定相对位置时,请替换您的

../some_directory/some_file.php

dirname(dirname(__FILE__)) . '/some_directory/some_file.php'

dirname(__FILE__)是当前目录。

于 2013-03-28T13:51:35.473 回答
2

我可以解释一下你的问题以及如何解决它。

php 中的包含与 C 中的一样。当您包含一个将页面内容复制/粘贴到第一个页面中的页面时。

所以,有两个文件:

包含.php

<?php
$var = 'PHP';
?>

主文件

<?php
include 'include.php';
echo $var; // affiche 'PHP'
?>

当您请求“main.php”页面时,您将获得以下信息:

<?php
$var = 'PHP';
echo $var; // affiche 'PHP'
?>

因此,如果您需要在页面中包含一个元素。你有两个选择:

1.绝对路径(更好的方式)

不要使用相对路径,而是使用绝对路径。这种方式允许您在不使用当前路径的情况下从任何地方包含文件。

2.变量

您可以使用包含存储库/网站根目录的相对路径的变量。所以每次你必须包含一个页面或创建一个页面时,你必须定义一个变量,如下所示:

包含.php

<?php
$var = 'PHP';
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"".$currentPath."css/style.css\" />";
?>

主文件

<?php
# path to the root of the website
$currentPath = "../";

include 'include.php';
echo $var; // affiche 'PHP'
?>

要了解有关包含的更多信息,请参阅此页面

于 2013-03-28T13:58:31.047 回答
1

你有两个选择

  1. 传递包含文件的相对路径

IE。

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

$path = "../";
include "header.php";

或 2. 您使用文件的绝对路径

<link rel="stylesheet" type="text/css" href="/css/style.css" />
于 2013-03-28T13:51:23.470 回答