【问题标题】:DOCTYPE causing external stylesheet to not function when using PHP as handler使用 PHP 作为处理程序时,DOCTYPE 导致外部样式表不起作用
【发布时间】:2013-09-20 20:11:49
【问题描述】:

在通过 Apache2 的 SetHandler、PHP 脚本传递请求以及在文档中指定 DOCTYPE 时,外部样式表工作时遇到问题。如果没有声明 DOCTYPE,则页面可以与外部样式表一起正常工作。这是在 Apache 2.2.15、PHP 5.3.3 以及 Apache 2.4.6、PHP 5.5.3 上。

我的 Apache 配置:

<VirtualHost *:80>
DocumentRoot /data/www/test
<Directory "/data/www/test/_auth">
    Require all granted
</Directory>
Action VerifyAuth /_auth/authenticate_test.php
<Directory "/data/www/test/testsite">
    SetHandler VerifyAuth
    Require all granted
</Directory>
</VirtualHost>

我的 authenticate_test.php 文件:

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

我正在测试的 index.html 文件:

<!DOCTYPE HTML>
<html>
<head>
<link href="/testsite/mainstyle.css" type="text/css" rel="stylesheet" media="all">
</head>
<body>
 <h1>Test Site</h1>
</body></html>

我正在测试的样式表 (mainstyle.css):

h1 { background:black; color:blue; width:100px; display: block;}

当我检查日志时,我可以看到样式表正在读取,返回码为 200,但未应用样式表格式。同样,当删除 DOCTYPE 时,页面会按预期加载。我可以将样式嵌入到 html 文件中,这也可以,但我需要能够使用外部样式表。

我想要完成的是让所有请求都通过一个用 PHP 编写的身份验证脚本,用于在 testsite 目录下访问的任何和所有内容。因为我不想通过从每个页面中删除所有 DOCTYPE 声明来自定义内容,所以无论是否声明了 DOCTYPE,我都希望它能够正常工作。

我已经在 Chromium 28.0.1500.71 (ubuntu 13.04)、Firefox 24.0 (ubuntu 13.04) 和 IE9 (Win 7) 上尝试过。

【问题讨论】:

  • 页面上没有其他代码?不同的文档类型会发生什么?
  • 页面上没有其他代码。我试图尽可能简单地解决这个问题,以帮助弄清楚发生了什么。其他文档类型不会改变行为。任何 doctype 都会导致样式不呈现。我一直在查看他的更多内容并使用 Chrome 开发工具,我看到:“资源解释为样式表,但使用 MIME 类型文本/html 传输”用于我的样式表。我猜 HTML 是通过带有 include 语句的 PHP 处理程序,但使用 DOCTYPE 时 CSS 的 MIME 类型不是 text/css。
  • 奇怪的是,当我删除 DOCTYPE 时,我得到了同样的消息,但内容显示正确。
  • 我现在无法回答我自己的问题,因为我是该网站的新手。但这是我的答案:不幸的是,我现在才在 stackoverflow (stackoverflow.com/questions/17429844/…) 上找到了这个。将我的 auth PHP 处理程序更改为此解决了我的问题:

标签: php apache2 doctype


【解决方案1】:

不幸的是,我刚刚在 stackoverflow (DOCTYPE in the head of the page causes session_problem) 上发现了这个。

将我的 auth PHP 处理程序更改为此已解决了我的问题:

<?php
$type =
(get_object_vars(apache_lookup_uri($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'])));
header('Content-type: '.$type['content_type']);
include($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI']);
?>

【讨论】:

    猜你喜欢
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多