質問とコメントから、直接アクセスのように見える URL を求めているようですが、それらをダウンロードするための認証を可能にするために PHP スクリプトを通過します。あなたの現在のディレクトリ構造がわからないので、この回答のテストケース用に作成します-小さなリストではありますが:
public-html/
content/ <- where the actual files are
.htaccess <- to deny access to the directory
.htaccess <- the one created here
download.php <- download script
このことから、すべてのファイルが に/content
あり、「直接リンク」が次のように見えると仮定します。/file
/content/.htaccess
:_
deny from all
次のものは、最初のRewriteRule
ものは既に存在する通常のファイルが上書きされないようにするためのものであり、前の.htaccess
ものはそのディレクトリ内のファイルへのアクセスを防ぐためのものであることに注意してください。既に使用している がある場合.htaccess
、重要なルールは最後のルールであり、一致すると処理が停止するため、既存の に適宜配置します.htaccess
。
/.htaccess
:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^file/(.+)$ download.php?file=$1 [L]
</IfModule>
それが整っていると、 に行くとファイルへの直接アクセスのように見え、のよう/file/myDocument.pdf
にスクリプトに送信されますdownload.php?file=myDocument.pdf
。
そこから、使用するダウンロード スクリプトを作成するだけです。私が投稿しているのは、Armand Niculescu の修正版です ここ. 関連する部分のみをここに投稿します (全体は PasteBin で見つけることができ、ここに投稿された部分をニーズに合わせて変更できます)。
/******************************
* PERFORM AUTHORIZATION HERE *
* The following is added *
******************************/
if($_SESSION['validated'] !== true) {
//Not authorized to download, send header and exit
header("HTTP/1.0 401 Unauthorized");
exit;
}
また、正しいファイル パスを 8 行下に少し編集しました。
$file_path = './content/' . $file_name;
以上で、動作するダウンロード スクリプトを取得し、ファイルに直接アクセスできるように見せる方法の小さな例を終わります。