Apacheの<Files>と<FilesMatch>、<Directory>と<DirectoryMatch>の違いは?

このQ&Aのポイント
  • <Files>と<FilesMatch>、<Directory>と<DirectoryMatch>の違いは、同じ挙動をするようですが、正規表現の使い方が異なります。
  • <Files>と<FilesMatch>の違いは、前者が単一のファイルに対して適用され、後者は正規表現にマッチする複数のファイルに対して適用されます。同様に、<Directory>と<DirectoryMatch>の違いも、フォルダへの適用対象が単一か複数かの違いです。
  • Apacheのマニュアルでは、<FilesMatch>と<DirectoryMatch>の使用が推奨されています。また、正規表現の使用も可能で、拡張正規表現を使うこともできます。
回答を見る
  • ベストアンサー

【Apache】<Files ~>と<FilesMatch>及び、<Directory ~>と<DirectoryMatch>の違いは?

<Files ~ "(?i:\.ini|\.tmp)$"> Order Deny,Allow deny from all </Files> と、 <FilesMatch "(?i:\.ini|\.tmp)$"> Order Deny,Allow deny from all </FilesMatch> また、 <Directory ~ "^/www/.*/[0-9]{3}"> Order Deny,Allow deny from all </Directory> と、 <DirectoryMatch "^/www/.*/[0-9]{3}"> Order Deny,Allow deny from all </DirectoryMatch> は、 どうも同じ挙動をしているように思われます。 (違っていたらご指摘ください。) Apacheのマニュアルには、 (http://httpd.apache.org/docs/2.0/ja/mod/core.html) <Files> ディレクティブ の項目を見ると、 //=========================================================== ~ という文字を付加することで拡張正規表現を使うこともできます。 例えば、 <Files ~ "\.(gif|jpe?g|png)$"> とすることにより、一般的なインターネットの画像フォーマットにマッチします。 ただし、 <FilesMatch> を使う方が 推奨されています。 //=========================================================== とあるのですが・・・。 (ただ、<DirectoryMatch> を使う方が 推奨されています。とは書いてないようです) これら、 <Files ~>と<FilesMatch>及び、<Directory ~>と<DirectoryMatch>の違いは、 いったいなになのでしょうか? ご存じの方いらっしゃいましたら、お教えいただければ幸いです。

  • ymck
  • お礼率69% (65/93)

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

違いはないでしょう。 Files ~ で表現していた正規表現(~無しのFilesの時は正規表現じゃなくてファイルマッチ)での指定をする専用のディレクティブを作ったということです。 新しい方を使いましょうと言うことだと思いますよ。

ymck
質問者

お礼

お礼しわすれておりました。失礼しました。 参考にさせていただきます。

関連するQ&A

  • apacheで<Directory>が機能しません

    apache2.2で、ヴァーチャルホストで複数ドメインを使用しています。 httpd.confの共通指定部分?に<Directory>や<Files>で下記のような指定したことが無視されます。 ・・・ヴァーチャルホスト設定部分の中に指定してもダメでした。 <Directory /home/user/html/aaa/bbb> Order deny,allow Deny from all </Directory> <Files ~ "^\.ht"> Order allow,deny Deny from all </Files> DirectoryMatchやFilesMatchも無視されます・・・ しかし、LocationとLocationMatchでやった場合は機能しました。 ちなみに、.htaccessに Order allow,deny Deny from all と、書いても無視されました・・・(リダイレクトや書き換えなどは使用できたので.htaccess自体は機能していると思うのですが) coreモジュールは入っています。 mod_authz_hostは、LoadModuleで読み込んでいます。 それ以外のモジュールが必要なのでしょうか? なぜ、Locationは使えるのに、DirectoryやFilesは使えないのでしょうか? 原因がさっぱりわかりません。詳しい方よろしくお願いします。

  • Apacheの設定 <Filesについて

    Apache 2.0.49(Win32)と 1.3.27-0vl9(Linux)を使っています。 httpd.confの設定で とりあえず全てのファイル(拡張子)をアクセス不可にして、 特定の拡張子のみを許可する設定にしたいのですが、記述方法がわかりません。 <Files "*"> order allow,deny deny from all </Files> <Files "\.cgi$"> order allow,deny allow from all </Files> とすると、全て拒否されて、cgiが動きません。 上の状態では当たり前かもしれませんが、 全て拒否して、特定のファイル(拡張子)のみアクセスを許す設定 にしたいのですが、よい方法はありますか?

  • Apacheで特定のファイルのみアクセス許可したい

    httpd.confの末尾に次の記述をしてapacheをリスタートしtop.htmlにアクセスしても 403エラーとなりアクセスできません。原因が分かる方よろしくお願いします。 <Directory "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/aaa"> Order deny,allow Deny from all SetEnvIf REFERER localhost referer_ok Allow from env=referer_ok </Directory> <Files "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/aaa/top.html"> Order allow,deny Allow from all </Files>

    • ベストアンサー
    • HTML
  • Apache(Ver 2.4.4)の設定のエラー

    おはようござます。 Win VISTAです。 Apache(Ver 2.4.4)の設定をしています。(XAMPP 1.8.3) いろいろと参考書を見ながら、意味もわからずhttpdファイル(C:\xampp\apache\conf\httpd)のセキュリティの設定変更をしていますが、 「Access forbidden! 要求されたディレクトリへのアクセス権限がありません。 インデックスドキュメントが存在しないか、 ディレクトリの読み込みが許可されていません。 サーバーの障害と思われる場合は、ウェブ管理者までご連絡ください。」 というエラーが出て困っています。 セキュリティの設定の変更までは、正常にインストールされているとの確認画面が出ていましたので、この変更のミスが原因としか考えられません。 何とど宜しくお願いします。 ============================================================= httpdファイル(C:\xampp\apache\conf\httpd)の内容(変更後です) <変更前の内容はバックアップをとっていませんのでわかりません・・・・> <Directory /> AllowOverride none Require all denied </Directory> DocumentRoot "C:/xampp/htdocs" <Directory "C:/xampp/htdocs"> ・ ・ ・ # Order allow,deny # Allow from all Order deny,allow Deny from All Allow from localhost 127.0.0.1 # AllowOverride All ・ ・ # Require all granted </Directory> ・ ・ ・ <Directory "C:/xampp/cgi-bin"> AllowOverride None Options None # Order allow,deny # Allow from all Order deny,allow Deny from All Allow from localhost 127.0.0.1 # Require all granted </Directory> ============================================================= (C:\xampp\apache\conf\extra\httpd-xampp)<このファイルは全く書き換えていません。> <Directory "C:/xampp/php"> AllowOverride None Options None Require all denied <Files "php-cgi.exe"> Require all granted </Files> </Directory> ・ ・ ・ <Directory "C:/xampp/cgi-bin"> <FilesMatch "\.php$"> SetHandler cgi-script </FilesMatch> <FilesMatch "\.phps$"> SetHandler None </FilesMatch> </Directory> <Directory "C:/xampp/htdocs/xampp"> <IfModule php5_module> <Files "status.php"> php_admin_flag safe_mode off </Files> </IfModule> AllowOverride AuthConfig </Directory> </Directory> Alias /licenses "C:/xampp/licenses/" <Directory "C:/xampp/licenses"> Options +Indexes <IfModule autoindex_color_module> ・ ・ </IfModule> Require all granted </Directory> =============================================================

    • ベストアンサー
    • PHP
  • Fedora Apache ユーザディレクトリの設定 /をつけないと表示されない!

    Fedora CoreのApacheでユーザディレクトリのコンテンツを公開するため、下記のように設定しました。 <IfModule mod_userdir.c> UserDir public_html </IfModule> <Directory /home/*/public_html> AllowOverride All Options IncludesNoExec ExecCGI FollowSymLinks <Limit GET POST OPTIONS> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS> Order deny,allow Deny from all </LimitExcept> </Directory> で、ばっちり見れるようになったんですが、下記のような問題が残っています。 http://ホストアドレス/~ユーザ名/ では正常に表示されるが、 http://ホストアドレス/~ユーザ名 のようにスラッシュを省略すると、表示されない。 ご存知の方おられましたらよろしくお願いしますー!

  • apacheのユーザーディレクトリの設定

    Fedora Core6のapacheのユーザーディレクトリの設定で悩んでいます。 設定ファイル(httpd.conf)には以下のように記述しています。 #UserDir disable UserDir public_html <Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec <Limit GET POST OPTIONS> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS> Order deny,allow Deny from all </LimitExcept> </Directory> ユーザー登録をして/home/ユーザ名/にpublic_htmlフォルダを作成して、index.htmlページを作り、http://localhost/~ユーザー名/index.htmlにアクセスしましたが、「403 Forbidden」となってしまいます。 http://127.0.0.1/~ユーザー名/でアクセスしても「403 Forbidden」になります。 フォルダやファイルのパーミッションをいろいろと変えてみましたが表示されません。 こちらはLinux勉強中の初心者です。 よろしくお願いします。

  • .ftpaccessで特定のファイル・ディレクトリ

    .ftpaccessで特定のファイルやディレクトリにIPアドレスでアクセス制限をかけたいと思っています。 使っているサーバーはロリポップです。 「.ftpaccess」記述は以下のように記述しましたがうまく行きません。 ======================================================== <Limit ALL> Order Allow,Deny Deny from all </Limit> <Files "sample.html"> order allow,deny deny from 111.111.111.111(IPアドレス) </Files> ======================================================== 111.111.111.111というIPアドレスからFTPソフトでアクセスが有った場合、sample.thmlにのみアクセスできるようにしたいです。 またファイルではなくディレクトリを制限・許可する方法も教えてほしいです。よろしくお願いします。

  • apache:特定のディレクトリのみSSLでしか接続できないようにするにはどうしたらよいでしょうか。

    RHL9.0でapache2.0(rpmでインストール)です。/var/www/html以下はhttpでもhttpsでも接続できるようにして/var/www/cgi-binはhttpsでしか接続できないようにできますか。その場合、http.confにはどのように記述したらよいのでしょうか。現在httpsで接続できるのですが、http.confにmod_sslに関する部分がありませんでした。Open-SSLはインストールされています。cgi-binは以下の設定となっています。 <Directory "/var/www/cgi-bin"> AllowOverride None Options None Order deny,allow Deny from all Allow from aaa.bbb. </Directory>

  • ApacheのOrderディレクティブについて

    Apacheのアクセス制御であるOrderディレクティブがAllowディレクティブとDenyディレクティブを評価する順番を制御することによってデフォルトのアクセス状態が下記に示す内容になると書かれています。  1)Order Deny , Allowのとき、デフォルトのアクセス状態は許可である。  2)Order Allow , Denyのとき、デフォルトのアクセス状態は拒否である。 なぜ、デフォルトのアクセス状態が上記に示す内容になるのか、分かりません。教えていただけませんでしょうか。よろしくお願いします。

  • apacheのScriptAliasの記述について

    どなたか,ご教授いただければ幸いです。 WindowsXp Proでapacheを動かしています。次の設定で,cgiはうまく動作していました。 --- <IfModule alias_module> ScriptAlias /cgi-bin/ \"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/\" </IfModule> <Directory \"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin\"> AllowOverride None Options ExecCGI Order allow,deny Allow from all AddHandler image/gif .gif AddHandler image/jpeg .jpg </Directory> --- これに, http://www.miloweb.net/win/server/apache.html を参考にして,各ユーザーフォルダでcgiが実行できるようにしようと,次のようにしました。 --- <IfModule alias_module> ScriptAlias /cgi-bin/ \"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/\" ScriptAlias /cgi/ \"C:/www/users/*/cgi/\" </IfModule> <Directory \"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin\"> AllowOverride None Options ExecCGI Order allow,deny Allow from all AddHandler image/gif .gif AddHandler image/jpeg .jpg </Directory> <IfModule mod_userdir.c> UserDir \"C:/www/users/*/\" </IfModule> <Directory \"C:/www/users/*/cgi/\"> AllowOverride None Options ExecCGI Order allow,deny Allow from all AddHandler image/gif .gif AddHandler image/jpeg .jp </Directory> --- その結果, http://localhost/~user/ としてuserのホームページにアクセスできるようになったのですが, cgiについては, http://localhost/~user/cgi/・・・ としてもアクセスできません。どなたか原因をご教授いただけないでしょうか。 ScriptAlias /cgi-bin/ \"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/\" ScriptAlias /cgi/ \"C:/www/users/*/cgi/\" の行を入れ替えると,\"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/\"においてあるcgiが実行できなくなります。ScriptAliasは1行目しか有効でないようにも見えるのですが,上に書いた参考URLではできているようなので,戸惑っています。