web-dev-qa-db-ja.com

Web.Configロケーションパス要素で複数のディレクトリを指定する

ASP.NETのWeb Configファイルで、次の場所要素を定義しています。

  <location path="">
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>

  <location path="dir1">
    <system.web>
      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>
  </location>

  <location path="dir2">
    <system.web>
      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>
  </location>

上記の例は、2つのディレクトリdir1とdir2を除くすべてのディレクトリが匿名ユーザーにロックダウンされることを指定しています。

1つの場所要素内に複数のディレクトリを定義できる構文を使用できるかどうか、知りたいです。たとえば、次のようなことができれば便利です...

  <location path="dir1,dir2,etc">
    <system.web>
      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>
  </location>
26
Jed

申し訳ありませんが、パスプロパティでは "、"の使用が許可されていないため、すべてのパスのタグを記述する必要があります。または、各ディレクトリにweb.configを作成できます。

15

Path属性に複数の要素を指定することはできませんが、configSource属性を利用できます。

たとえば、次の元のweb.configファイル:

<?xml version="1.0"?>
<configuration>
  <location path="form1.aspx">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>
  <location path="form2.aspx">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>
  <location path="form3.aspx">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>
  <location path="form4.aspx">
    <system.web>
      <authorization>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>
  <location path="form5.aspx">
    <system.web>
      <authorization>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>
  <location path="form6.aspx">
    <system.web>
      <authorization>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>
</configuration>

以下の同等のweb.config、allow.config、およびdeny.configファイルで置き換えることができます。

web.config

<?xml version="1.0"?>
<configuration>
  <location path="form1.aspx">
    <system.web>
      <authorization configSource="allow.config" />
    </system.web>
  </location>
  <location path="form2.aspx">
    <system.web>
      <authorization configSource="allow.config" />
    </system.web>
  </location>
  <location path="form3.aspx">
    <system.web>
      <authorization configSource="allow.config" />
    </system.web>
  </location>
  <location path="form4.aspx">
    <system.web>
      <authorization configSource="deny.config" />
    </system.web>
  </location>
  <location path="form5.aspx">
    <system.web>
      <authorization configSource="deny.config" />
    </system.web>
  </location>
  <location path="form6.aspx">
    <system.web>
      <authorization configSource="deny.config" />
    </system.web>
  </location>
</configuration>

allow.config

<?xml version="1.0"?>
<authorization>
  <allow users="*"/>
</authorization>

deny.config

<?xml version="1.0"?>
<authorization>
  <deny users="*"/>
</authorization>

このアプローチの有用性は、各セクションの許可/拒否ルールの数が増えるにつれて高まります。

39
Ryan Prechel

特定のフォルダへのパスを設定することが可能です。たとえば、aspxページがいくつかあります。

  • /data/pages/form1.aspx
  • /data/pages/form2.aspx
  • /data/pages/form3.aspx

このルールをweb.configに作成することにより:

<location path="data/pages">
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <remove name="X-Frame-Options" />
                <add name="X-Frame-Options" value="SAMEORIGIN" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</location>

data/pagesのすべてのリソースが影響を受けます。

0
aleha

同様の問題がありました。別のタグを作成する通常の方法で行ったので、他の優れたソリューションはありませんでした。

0
Azum