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ファイルに埋め込むこともできますが、これも機能しますが、外部スタイルシートを利用できる必要があります。
私が達成しようとしているのは、testsite ディレクトリの下でアクセスされるすべてのコンテンツに対して、すべての要求が PHP で記述された認証スクリプトを通過するようにすることです。各ページからすべての DOCTYPE 宣言を削除して必ずしもカスタマイズしたくないコンテンツがあるため、DOCTYPE が宣言されているかどうかに関係なく、これを機能させたいと考えています。
Chromium 28.0.1500.71 (ubuntu 13.04)、Firefox 24.0 (ubuntu 13.04)、および IE9 (Win 7) でこれを試しました。