仮想ディレクトリ <virtualDirectory>
- 概要
- 互換性
- セットアップ
- 方法
- 構成
- サンプル コード
※本ページに挿入されている画像をクリックすると、画像全体が別ウィンドウで表示されます。
概要
<virtualDirectory>
要素は <application>
要素の子要素であり、特定の仮想ディレクトリの構成設定を制御します。仮想ディレクトリは、インターネット インフォメーション サービス (IIS) 7.0 で指定するディレクトリ名 (パスとも言います) で、ローカル サーバーまたはリモート サーバー上の物理ディレクトリにマップします。仮想ディレクトリ名はアプリケーションの URL の一部になり、ユーザーは、ブラウザーからこの URL を要求してWeb ページや追加ディレクトリやファイルのリストといった物理ディレクトリ内のコンテンツにアクセスできます。仮想ディレクトリ名に物理ディレクトリと異なる名前を指定すると、URL がサイトのルートに直接マップしないので、ユーザーがサーバーの実際の物理ファイル構造を知るのが難しくなります。
IIS 7.0 では、各アプリケーションが仮想ディレクトリ (ルート仮想ディレクトリと呼びます) を持つ必要があります。この仮想ディレクトリは、アプリケーションを、そのアプリケーションのコンテンツがある物理ディレクトリにマップします。ただし、1 つのアプリケーションが複数の仮想ディレクトリを持つことができます。たとえば、アプリケーションにファイル システム内の別の場所にあるイメージを含めたいが、アプリケーションのルート仮想ディレクトリにマップされた物理ディレクトリにそのイメージ ファイルを移動させたくない場合に、別の仮想ディレクトリを使用できます。
互換性
IIS 7.0 | IIS 6.0 | |
---|---|---|
説明 | <virtualDirectory> は IIS 7.0 で新たに導入された要素です。 |
|
セットアップ
<virtualDirectory>
要素は、IIS 7.0 の既定のインストールに含まれています。
方法
新しい仮想ディレクトリを作成する方法
[スタート] ボタン、[管理ツール]、[インターネット インフォメーション サービス (IIS) マネージャー] の順にクリックします。
[接続] ウィンドウで、対象のサーバー名、[サイト]、仮想ディレクトリを追加する Web サイトの順に展開します。次に、仮想ディレクトリの追加先のアプリケーションをクリックします。
[操作] ウィンドウで [仮想ディレクトリの表示] をクリックし、[仮想ディレクトリの追加] をクリックします。
[仮想ディレクトリの追加] ダイアログ ボックスで、少なくとも [エイリアス] ボックスと [物理パス] ボックスに情報を入力して [OK] をクリックします。
注 : 仮想ディレクトリ内のコンテンツへのアクセス時に指定された資格情報を使用するようにサーバーを構成するには、[接続] をクリックします。仮想ディレクトリの認証および承認の設定をテストするには、[テスト設定] をクリックします。
構成
<virtualDirectory>
要素は、ApplicationHost.config ファイル内で、サーバー、サイト、およびアプリケーション レベルで構成できます。
属性
属性 | 説明 |
---|---|
allowSubDirConfig |
オプションの Boolean 属性。 True の場合は、IIS は現在の階層より下のコンテンツ ディレクトリで Web.config ファイルを検索し、False の場合は、現在の階層より下のコンテンツ ディレクトリで Web.config ファイルを検索しません。 既定値は true です。 |
logonMethod |
オプションの enum 属性。 仮想ディレクトリのログオン方法を指定します。 logonMethod 属性には、次のいずれかの値を指定できます既定値は ClearText です。--------------------------------------------------------------------------------------------------------- 値: Batch 説明:
値: ClearText 説明:
値: Interactive 説明:
値: Network 説明:
|
password |
オプションの string 属性。 ユーザー名に関連付けられるパスワードを指定します。 注 : 暗号化されていないパスワード文字列が構成ファイルに保存されないようにするために、必ず AppCmd.exe または IIS マネージャーを使用してパスワードを入力してください。これらの管理ツールを使用すると、パスワード文字列は自動的に暗号化されてから XML 構成ファイルに書き込まれます。そのため、暗号化されていないパスワードを保存するよりも、パスワードのセキュリティが強化されます。 |
path |
オプションの string 属性。 仮想ディレクトリの仮想パスを指定します。 |
physicalPath |
オプションの string 属性。 仮想ディレクトリの物理パスを指定します。 |
userName |
オプションの string 属性。 この仮想ディレクトリの構成ファイルとコンテンツにアクセスできるアカウントのユーザー名を指定します。 |
子要素
なし。
構成サンプル
次の構成例は、2 つのアプリケーションを含む <site>
要素を示しています。最初の <application>
要素では、そのサイトのルート アプリケーションと、そのアプリケーションのルート仮想ディレクトリを定義しています。2 番目の <application>
要素には、その Web サイト上の CRM アプリケーションの構成設定が含まれています。path 属性によって、アプリケーションのパスを定義しています。この <application>
要素には、2 つの <virtualDirectory>
要素が含まれています。最初の要素では、アプリケーションのルート仮想ディレクトリを定義しています。2 番目の要素では、アプリケーションの Images 仮想ディレクトリを定義しています。
<site name="Contoso" id="2" serverAutoStart="true">
<application path="/">
<virtualDirectory path="/" physicalPath="C:\Contoso\Content" />
</application>
<application path="/CRM">
<virtualDirectory path="/" physicalPath="C:\Contoso\Content\CRM" />
<virtualDirectory path="/Images" physicalPath="E:\Images" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:www.contoso.com" />
</bindings>
</site>
サンプル コード
次の例では、Contoso という名前のサイトに、ShoppingCart という名前の新しいアプリケーションを作成し、このアプリケーションのルート仮想ディレクトリとして C:\Inetpub\Contoso\ShoppingCart を指定しています。
注 : コマンド プロンプトまたはスクリプトからアプリケーションを作成する場合は、そのアプリケーションのルート仮想ディレクトリを明示的に作成する必要があります。
AppCmd.exe
appcmd.exe set config -section:system.applicationHost/sites /+"[name='Contoso'].[path='/ShoppingCart']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/sites /+"[name='Contoso'].[path='/ShoppingCart'].[path='/',physicalPath='C:\Inetpub\Contoso\ShoppingCart']" /commit:apphost
C#
using System;
using System.Text;
using Microsoft.Web.Administration;
internal static class Sample
{
private static void Main()
{
using (ServerManager serverManager = new ServerManager())
{
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection sitesSection = config.GetSection("system.applicationHost/sites");
ConfigurationElementCollection sitesCollection = sitesSection.GetCollection();
ConfigurationElement siteElement = FindElement(sitesCollection, "site", "name", @"Contoso");
if (siteElement == null) throw new InvalidOperationException("Element not found!");
ConfigurationElementCollection siteCollection = siteElement.GetCollection();
ConfigurationElement applicationElement = siteCollection.CreateElement("application");
applicationElement["path"] = @"/ShoppingCart";
ConfigurationElementCollection applicationCollection = applicationElement.GetCollection();
ConfigurationElement virtualDirectoryElement = applicationCollection.CreateElement("virtualDirectory");
virtualDirectoryElement["path"] = @"/";
virtualDirectoryElement["physicalPath"] = @"C:\Inetpub\Contoso\ShoppingCart";
applicationCollection.Add(virtualDirectoryElement);
siteCollection.Add(applicationElement);
serverManager.CommitChanges();
}
}
private static ConfigurationElement FindElement(ConfigurationElementCollection collection, string elementTagName, params string[] keyValues)
{
foreach (ConfigurationElement element in collection)
{
if (String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase))
{
bool matches = true;
for (int i = 0; i < keyValues.Length; i += 2)
{
object o = element.GetAttributeValue(keyValues[i]);
string value = null;
if (o != null)
{
value = o.ToString();
}
if (!String.Equals(value, keyValues[i + 1], StringComparison.OrdinalIgnoreCase))
{
matches = false;
break;
}
}
if (matches)
{
return element;
}
}
}
return null;
}
}
VB.NET
Imports System
Imports System.Text
Imports Microsoft.Web.Administration
Module Sample
Sub Main()
Dim serverManager As ServerManager = New ServerManager
Dim config As Configuration = serverManager.GetApplicationHostConfiguration
Dim sitesSection As ConfigurationSection = config.GetSection("system.applicationHost/sites")
Dim sitesCollection As ConfigurationElementCollection = sitesSection.GetCollection
Dim siteElement As ConfigurationElement = FindElement(sitesCollection, "site", "name", "Contoso")
If (siteElement Is Nothing) Then
Throw New InvalidOperationException("Element not found!")
End If
Dim siteCollection As ConfigurationElementCollection = siteElement.GetCollection
Dim applicationElement As ConfigurationElement = siteCollection.CreateElement("application")
applicationElement("path") = "/ShoppingCart"
Dim applicationCollection As ConfigurationElementCollection = applicationElement.GetCollection
Dim virtualDirectoryElement As ConfigurationElement = applicationCollection.CreateElement("virtualDirectory")
virtualDirectoryElement("path") = "/"
virtualDirectoryElement("physicalPath") = "C:\Inetpub\Contoso\ShoppingCart"
applicationCollection.Add(virtualDirectoryElement)
siteCollection.Add(applicationElement)
serverManager.CommitChanges()
End Sub
Private Function FindElement(ByVal collection As ConfigurationElementCollection, ByVal elementTagName As String, ByVal ParamArray keyValues() As String) As ConfigurationElement
For Each element As ConfigurationElement In collection
If String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase) Then
Dim matches As Boolean = True
Dim i As Integer
For i = 0 To keyValues.Length - 1 Step 2
Dim o As Object = element.GetAttributeValue(keyValues(i))
Dim value As String = Nothing
If (Not (o) Is Nothing) Then
value = o.ToString
End If
If Not String.Equals(value, keyValues((i + 1)), StringComparison.OrdinalIgnoreCase) Then
matches = False
Exit For
End If
Next
If matches Then
Return element
End If
End If
Next
Return Nothing
End Function
End Module
JavaScript
var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST");
var sitesCollection = sitesSection.Collection;
var siteElementPos = FindElement(sitesCollection, "site", ["name", "Contoso"]);
if (siteElementPos == -1) throw "Element not found!";
var siteElement = sitesCollection.Item(siteElementPos);
var siteCollection = siteElement.Collection;
var applicationElement = siteCollection.CreateNewElement("application");
applicationElement.Properties.Item("path").Value = "/ShoppingCart";
var applicationCollection = applicationElement.Collection;
var virtualDirectoryElement = applicationCollection.CreateNewElement("virtualDirectory");
virtualDirectoryElement.Properties.Item("path").Value = "/";
virtualDirectoryElement.Properties.Item("physicalPath").Value = "C:\\Inetpub\\Contoso\\ShoppingCart";
applicationCollection.AddElement(virtualDirectoryElement);
siteCollection.AddElement(applicationElement);
adminManager.CommitChanges();
function FindElement(collection, elementTagName, valuesToMatch) {
for (var i = 0; i < collection.Count; i++) {
var element = collection.Item(i);
if (element.Name == elementTagName) {
var matches = true;
for (var iVal = 0; iVal < valuesToMatch.length; iVal += 2) {
var property = element.GetPropertyByName(valuesToMatch[iVal]);
var value = property.Value;
if (value != null) {
value = value.toString();
}
if (value != valuesToMatch[iVal + 1]) {
matches = false;
break;
}
}
if (matches) {
return i;
}
}
}
return -1;
}
VBScript
Set adminManager = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST")
Set sitesCollection = sitesSection.Collection
siteElementPos = FindElement(sitesCollection, "site", Array("name", "Contoso"))
If (siteElementPos = -1) Then
WScript.Echo "Element not found!"
WScript.Quit
End If
Set siteElement = sitesCollection.Item(siteElementPos)
Set siteCollection = siteElement.Collection
Set applicationElement = siteCollection.CreateNewElement("application")
applicationElement.Properties.Item("path").Value = "/ShoppingCart"
Set applicationCollection = applicationElement.Collection
Set virtualDirectoryElement = applicationCollection.CreateNewElement("virtualDirectory")
virtualDirectoryElement.Properties.Item("path").Value = "/"
virtualDirectoryElement.Properties.Item("physicalPath").Value = "C:\Inetpub\Contoso\ShoppingCart"
applicationCollection.AddElement(virtualDirectoryElement)
siteCollection.AddElement(applicationElement)
adminManager.CommitChanges()
Function FindElement(collection, elementTagName, valuesToMatch)
For i = 0 To CInt(collection.Count) - 1
Set element = collection.Item(i)
If element.Name = elementTagName Then
matches = True
For iVal = 0 To UBound(valuesToMatch) Step 2
Set Property = element.GetPropertyByName(valuesToMatch(iVal))
value = property.Value
If Not value = Null Then
value = CStr(value)
End If
If Not value = valuesToMatch(iVal + 1) Then
matches = False
Exit For
End If
Next
If matches Then
Exit For
End If
End If
Next
If matches Then
FindElement = i
Else
FindElement = -1
End If
End Function