私はアップロードと呼ばれるクライアントの私のカスタムディレクトリに次の.htaccessファイルを持っています。
RewriteEngine On
RewriteCond %{HTTP_REFERER} !(www.)?example.co.uk/client-area*
RewriteRule ^.*$ - [R=403,L]
ErrorDocument 403 'http://www.example.co.uk/client-area/'
そのため、誰かがクライアントエリアページ以外の場所からuploads/client /ディレクトリ内のファイルにアクセスしようとすると、リダイレクトされます。
ただし、download_url
を使用してそのディレクトリ内のファイルにアクセスするときは、これを無視したいです。これを容易にするために使用できる書き換え条件はありますか?
pre_http_request
をフィルタリングすることで、WordPressのHTTPリクエストに構成済みのリファラーを挿入できます。あなたが必要とするのはこのような単純なクラスだけです(未テスト!):
class FakeWpReferer
{
private $referer;
private $url;
private $is_regex;
/**
* @param string $referer
* @param string $url URL to fake the referer for.
* @param bool $is_regex Is $url a regular expression?
*/
public function __construct( $referer, $url, $is_regex = FALSE )
{
$this->referer = $referer;
$this->url = $url;
$this->is_regex = $is_regex;
}
/**
* @wp-hook pre_http_request
* @param array $args
*
* @return array
*/
public function inject( array $args, $url )
{
if ( $this->match_url( $url ) )
$args['headers']['Referer'] = $this->referer;
return $args;
}
/**
* @param string $request_url
*
* @return bool
*/
private function match_url( $request_url )
{
if ( ! $this->is_regex )
return $request_url === $this->url;
return (bool) preg_match( $this->url, $request_url );
}
}
そしてそれをフィルタとして登録します。
$fake = new FakeWpReferer(
'http://example.co.uk/client-area',
'~^http://www.example.co.uk/uploads/~',
TRUE
);
add_filter( 'pre_http_request', [ $fake, 'inject' ], 10, 2 );
それからdownload_url()
を使うことができ、WordPressはあなたのカスタムリファラーを使います。他の誰もがリファラーを偽造することができることに注意してください。ですから、あなたの「保護」は実際にはそうではありません。