在通过 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) 上试过这个。