質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

Q&A

解決済

3回答

1636閲覧

特定の拡張子に付与しているリファラ制限を特定のファイルだけ制限を除外したい

rmrmnrm

総合スコア139

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

0グッド

0クリップ

投稿2022/03/08 03:10

Webサイトの特定のディレクトリ内で、PDFの直接アクセスをブロックするため下記の記述をhtaccessに設定しています。
これは正常に機能しています。

htaccess

1SetEnvIf Referer "^サイトドメイン" ShowOK 2<Files ~ "\.pdf$"> 3order deny,allow 4deny from all 5allow from env=ShowOK 6</Files>

今回、この制限を除外したいPDFが発生したのですが、除外の記述がうまくいきません。
Basic認証の除外に関する記事は多く見つけたのですが、それらの転用ではうまくいかないようです。
※記述の並びを変えてもリファラ制限が優先されました。

htaccess

1SetEnvIf Referer "^サイトドメイン" ShowOK 2<Files ~ "\.pdf$"> 3order deny,allow 4deny from all 5allow from env=ShowOK 6</Files> 7 8<Files "xxxx\.pdf"> 9Satisfy Any 10Order allow,deny 11Allow from all 12Deny from none 13</Files>

そもそものファイルディレクティブを正規表現にすれば、と思いましたが正規表現の除外の書き方の参考が少なく、下記記述ではリファラ制限が優先され除外を実現できませんでした。

htaccess

1SetEnvIf Referer "^サイトドメイン" ShowOK 2<FilesMatch "(\.pdf|^.*(?<!xxxx\.pdf))$"> 3order deny,allow 4deny from all 5allow from env=ShowOK 6</FilesMatch>

そもそもの制限がかかっているPDFが数百あり、制限を除外するファイルのほうが少ないのでできれば除外するファイルを指定する方法が望ましいです。
ご教示お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

今回、この制限を除外したいPDFが発生したのですが、除外の記述がうまくいきません。

ファイル名を指定して許可したいということであれば、既存のアクセス許可の条件を利用して ShowOK 条件を複数設定すればよいのではないでしょうか。

SetEnvIf Referer "^サイトドメイン" ShowOK SetEnvIf Request_URI "xxxx\.pdf$" ShowOK SetEnvIf Request_URI "zzzz\.pdf$" ShowOK <Files ~ "\.pdf$"> order deny,allow deny from all allow from env=ShowOK </Files>

投稿2022/03/08 03:43

編集2022/03/08 03:50
CHERRY

総合スコア25234

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rmrmnrm

2022/03/08 05:28

回答ありがとうございます。こちらで実現できました。 目からうろこでした。 対象URLの管理もしやすく助かりました。ありがとうございます。
guest

0

正規表現が間違っているように見えます。

htaccess

1SetEnvIf Referer "^サイトドメイン" ShowOK 2<FilesMatch "^(?=.*\.pdf)(?!.*^xxxx\.pdf).*$"> 3order deny,allow 4deny from all 5allow from env=ShowOK 6</FilesMatch>

投稿2022/03/08 03:53

PlugOut777

総合スコア917

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rmrmnrm

2022/03/08 05:30

回答ありがとうございます。 こちらでも実装できました!
guest

0

SetEnvIf Referer "^サイトドメイン" ShowOK <FilesMatch "(\.pdf|^.*(?<!xxxx\.pdf))$"> order deny,allow deny from all allow from env=ShowOK </FilesMatch>

これでは、\.pdf$ にマッチした時点でアクセスが拒否されてしまいます。また否定的後読みの使い方がおかしいです。

SetEnvIf Referer "^サイトドメイン" ShowOK <FilesMatch "(?<!xxxx)\.pdf$"> order deny,allow deny from all allow from env=ShowOK </FilesMatch>

これでどうでしょうか。

投稿2022/03/08 03:56

arcxor

総合スコア2857

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rmrmnrm

2022/03/08 05:26

回答ありがとうございます。 否定的後読みについてのご指摘ありがとうございます。 PDF以外のファイルは制限をかけないので、.pdfに関する記述も必要でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問