さて、これが私の答えです - そして、最良の答えが「いいえ」であることは事実です. しかし、images/js/css は開発において (実際に公開される前に) 比較的重要であり、クライアント プレビューでは、IP ベースの apache ルールを実行できないことが示されています。したがって、ルール (上から少し修正) は次のとおりです。
RewriteEngine On
# Exclude the public and error directories from authentication
RewriteRule ^(public|error)($|/) - [L]
# Perform authentication via php
RewriteCond %{REQUEST_FILENAME} !auth.php
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* auth.php?requested_file=$0 [QSA,L]
(コンテンツが実際に公開されているいくつかのサブディレクトリが必要だったため、ログインページで使用される images/css/js を読んでください)
関連するphpは次のとおりです。為に
if($authenticated){
if($extension == 'php'){
call_user_func(function(){
$file_name = func_get_arg(0);
$path = getcwd();
chdir(pathinfo($file_name,PATHINFO_DIRNAME));
return include($file_name);
chdir($path);
}, $file_name);
} else {
//set cache headers so the browsers don't have to refresh all the
// static content
header_remove('X-Powered-By');
header_remove('Transfer-Encoding');
header_remove('Cache-Control');
header_remove('Pragma');
header_remove('Expires');
//header('Expires:');
header('Content-type: '.$mime_type);
readfile($file_name);
}
}
これが行うことはcall_user_func()
、名前空間の汚染を停止include()
し、PHP を実行chdir()
し、スクリプトが適切な現在の作業ディレクトリを取得することを確認するために php を実行することです。
それは「簡単な」部分です。コンテンツ ヘッダーと MIME タイプは「推測」する必要があります (私は MIME タイプに finfo を使用しましたが、2013 年の時点でバグがあり、これは問題を悪化させるだけです)。Apache でも 100% 適切にそれを行うことはできません。 ...
次に、画像のキャッシュ制御ヘッダーを削除します。そうしないと、php ページと同じだけでなく...
言うだけで十分です。これを行う必要があるのは、パイプが太く、必要のない CPU サイクルが多い場合のみです...