Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Visão geral
O elemento <virtualDirectory>
é filho do elemento <application>
e controla as configurações de um diretório virtual específico. Um diretório virtual é um nome de diretório (também conhecido como caminho) que você especifica no IIS (Serviços de Informações da Internet) 7 e mapeia para um diretório físico em um servidor local ou remoto. O nome do diretório virtual se torna parte da URL do aplicativo e os usuários podem solicitar a URL de um navegador para acessar o conteúdo no diretório físico, como uma página da Web ou uma lista de diretórios e arquivos adicionais. Se você especificar um nome diferente do diretório físico para o diretório virtual, será mais difícil para os usuários descobrirem a estrutura de arquivo físico real em seu servidor porque a URL não é mapeada diretamente para a raiz do site.
No IIS 7, cada aplicativo deve ter um diretório virtual, conhecido como diretório virtual raiz e mapeia o aplicativo para o diretório físico que contém o conteúdo do aplicativo. No entanto, um aplicativo pode ter mais de um diretório virtual. Por exemplo, você pode usar um diretório virtual quando quiser que seu aplicativo inclua imagens de outro local no sistema de arquivos, mas não deseja mover os arquivos de imagem para o diretório físico mapeado para o diretório virtual raiz do aplicativo.
Compatibilidade
Versão | Observações |
---|---|
IIS 10.0 | O elemento <virtualDirectory> não foi modificado no IIS 10.0. |
IIS 8.5 | O elemento <virtualDirectory> não foi modificado no IIS 8.5. |
IIS 8.0 | O elemento <virtualDirectory> não foi modificado no IIS 8.0. |
IIS 7.5 | O elemento <virtualDirectory> não foi modificado no IIS 7.5. |
IIS 7.0 | O elemento <virtualDirectory> foi introduzido no IIS 7.0. |
IIS 6,0 | O elemento <virtualDirectory> substitui os objetos de metabase IIsWebVirtualDir e IIsWebDirectory do IIS 6.0. |
Instalação
O elemento <virtualDirectory>
está incluído na instalação padrão do IIS 7.
Instruções
Como criar um novo diretório virtual.
Abra o Gerenciador dos Serviços de Informações da Internet (IIS):
Caso você esteja usando o Windows Server 2012 ou o Windows Server 2012 R2:
- Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador dos Serviços de Informações da Internet (IIS).
Se você estiver usando o Windows 8 ou Windows 8.1:
- Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
- Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
Caso você esteja usando o Windows Server 2008 ou o Windows Server 2008 R2:
- Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador dos Serviços de Informações da Internet (IIS).
Se você estiver usando o Windows Vista ou Windows 7:
- Na barra de tarefas, clique em Iniciar e, depois, em Painel de Controle.
- Clique duas vezes em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
No painel Conexões, expanda o nome do servidor, Sites, o site ao qual deseja adicionar o diretório virtual e, em seguida, clique no aplicativo ao qual deseja adicionar o diretório virtual.
No painel Ações, clique em Exibir Diretórios Virtuais e, em seguida, clique em Adicionar Diretório Virtual...
Na caixa de diálogo Adicionar Diretório Virtual, insira, no mínim,o informações nas caixas de texto Alias: e Caminho físico: e, em seguida, clique em OK.
Observação
Você pode clicar em Conectar como... para configurar o servidor para usar as credenciais especificadas quando ele acessar o conteúdo no diretório virtual e clicar em Configurações de Teste... para testar as configurações de autenticação e autorização do diretório virtual.
Configuração
O elemento <virtualDirectory>
pode ser configurado no nível do servidor, do site e do aplicativo no arquivo ApplicationHost.config.
Atributos
Atributo | Descrição | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
allowSubDirConfig |
Atributo booliano opcional. Especifica se o IIS procura arquivos web.config em diretórios de conteúdo inferiores ao nível atual (True) ou não procura arquivos web.config em diretórios de conteúdo inferiores ao nível atual (False). O valor padrão é true . |
||||||||||
logonMethod |
Atributo de enumeração opcional. Especifica o método de logon para o diretório virtual. O atributo logonMethod pode ser um dos valores possíveis a seguir. O padrão é ClearText .
|
||||||||||
password |
Atributo de cadeia de caracteres opcional. Especifica a senha associada ao nome de usuário. Observação: para evitar o armazenamento de cadeias de caracteres de senha não criptografadas em arquivos de configuração, use sempre AppCmd.exe ou o gerenciador do IIS para inserir senhas. Se você usar essas ferramentas de gerenciamento, as cadeias de caracteres de senha serão criptografadas automaticamente antes de serem gravadas nos arquivos de configuração XML. Isso fornece melhor segurança de senha do que armazenar senhas não criptografadas. |
||||||||||
path |
Atributo de cadeia de caracteres opcional. Especifica o caminho virtual do diretório virtual. |
||||||||||
physicalPath |
Atributo de cadeia de caracteres opcional. Especifica o caminho físico do diretório virtual. |
||||||||||
userName |
Atributo de cadeia de caracteres opcional. Especifica o nome de usuário de uma conta que pode acessar arquivos de configuração e conteúdo para esse diretório virtual. |
Elementos filho
Nenhum.
Exemplo de configuração
O exemplo de configuração a seguir exibe um elemento <site>
que contém dois aplicativos. O primeiro elemento <application>
define o aplicativo raiz para o site, juntamente com o diretório virtual raiz do aplicativo. O segundo elemento <application>
contém as configurações de um aplicativo CRM no site. O atributo path define o caminho para o aplicativo. Esse elemento <application>
contém dois elementos <virtualDirectory>
. O primeiro define o diretório virtual raiz do aplicativo e o segundo define um diretório virtual de imagens para o aplicativo.
<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>
Exemplo de código
Os exemplos a seguir criam um novo aplicativo chamado ShoppingCart com uma raiz de diretório virtual de C:\Inetpub\Contoso\ShoppingCart para um site chamado Contoso.
Observação
Ao criar um aplicativo a partir do prompt de comando ou de um script, você deve criar explicitamente um diretório virtual raiz para o aplicativo.
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
Observação
Defina o parâmetro commit para apphost
quando usar AppCmd.exe para definir essas configurações. Isso confirma as definições de configuração para a seção de local apropriado no arquivo ApplicationHost.config.
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 IsNull(value) Then
value = CStr(value)
End If
If Not value = CStr(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