网站获取非根目录下面的文件---虚拟路径

来源:互联网 发布:淘宝买东西不花钱教程 编辑:程序博客网 时间:2024/05/16 14:56

转自:http://blog.163.com/rihui_7/blog/static/2122851432013211050560/


最近在做一个网站,电子书的,首页要显示电子书的图片,电子书的图片不在网站的根目录下面,而是在另外一个盘里面,数据库里面知道这个图片的路径如p:A/4515.jpg。这样怎样将这张图片显示在网页上面? 上csdn问了一下,得知需要加载虚拟目录。于是该vs2010的自带的服务器二用IIS服务器来调试,打开“Internet信息服务”将网站加载上去,再在网站上面新建两个虚拟路径。

books 和 books2 以后访问里面的文件就可以写成  /books/A/4515.jpg了就像直接访问对应的盘符文件一样。

网站获取非根目录下面的文件---虚拟路径 - 倚楼听风雨 - 听雨读诗
 

 下面是在网上找的一些资料:

IIS虚拟目录作用

分类: IIS 2010-10-30 00:28 1057人阅读 评论(0) 收藏 举报

虚拟目录对应到URL的名称 如 http://zhidao.baidu.com/question/ 中question就是一个虚拟目录 
很多时候,上传的文件多了,架设服务器当初设定的主目录所在盘空间往往就不够了,怎么办?这就需要设置虚拟目录。虚拟目录就是将其他目录以映射的方式虚拟到该FTP服务器的主目录下,这样,一个FTP服务器的主目录实质上就可以包括很多不同盘符、不同路径的目录,而不会受到所在盘空间的限制了。当用户登录到主目录下,还可以根据该账户的权限对它进行相应的操作,就像操作主目录下的子目录一样。如果用户被锁定在主目录下,这项功能将允许他们访问主目录之外的其它目录。

主目录设置的权限如果与虚拟目录的权限发生冲突,则以主目录权限为准。比如主目录设置的权限为读取和写入,而虚拟目录的权限只设置为读取,则其权限将会被主目录权限覆盖掉,自动拥有写入权限。

IIS 支持虚拟目录,通过在“服务器属性”对话框中的“目录”标签可以管理虚拟目录。建立虚拟目录对于管理 WEB 站点具有非常重要的意义。首先,虚拟目录隐藏了有关站点目录结构的重要信息。因为在浏览器中,客户通过选择“查看源代码”,很容易就能获取页面的文件路径信息,如果在 WEB 页中使用物理路径,将暴露有关站点目录的重要信息,这容易导致系统受到攻击。其次,只要两台机器具有相同的虚拟目录,你就可以在不对页面代码做任何改动的情况下,将 WEB 页面从一台机器上移到另一台机器。还有就是,当你将 WEB 页面放置于虚拟目录下后,你可以对目录设置不同的属性,如:Read、Excute、Script。读访问表示将目录内容从 IIS 传递到浏览器。而执行访问则可以使在该目录内执行可执行的文件。当你需要使用 ASP 时,就必须将你存放 .asp 文件的目录设置为“Excute(执行)”。作者建议大家在设置 WEB 站点时,将 HTML 文件同 ASP 文件分开放置在不同的目录下,然后将 HTML 子目录设置为“读”,将 ASP 子目录设置为“执行”,这不仅方便了对 WEB 的管理,而且最重要的提高了 ASP 程序的安全性,防止了程序内容被客户所访问。因为在今年 7 月底的时候 IIS 被一些网络高手发现了一个可怕的 bug,那就是,当你在一个站点的 .asp 文件后加上 ::$DATA 后,客户将能在浏览器中看到该 .asp 文件的所有源代码,这对于一个站点来说是非常可怕的。当然微软已经针对这个 bug,编写了补丁,但是为了彻底杜绝这种可能性的发生,作者还一建议大家不要将 .asp 所在的目录设置为可读

来源:http://blog.csdn.net/jiyidianranyikeyan/article/details/5975477

 

C#使用DirectoryEntry操作IIS创建网站和虚拟路径

在.Net中我们可以使用内置的类DirectoryEntry来承载IIS服务器中的任何网站,虚拟路径或应用程序池对象,例如:
 
DirectoryEntry ent = new DirectoryEntry("IIS://localhost/w3svc/1/root");
就创建了一个IIS路径为IIS://localhost/w3svc/1/root的虚拟路径对象。
 
为了在IIS中创建一个网站,我们首先需要确定输入的网站路径在IIS中是否存在,这里主要是根据网站在IIS中的ServerBindings属性来区分:
DirectoryEntry ent;
DirectoryEntry rootEntry;
try
{
  ent = EnsureNewWebSiteAvailable(host + ":" + port + ":" + webSiteDesc);
  if (ent != null)
  {
    //这里如果用户输入的网站在IIS中已经存在,那么直接获取网站的root对象,也就是网站的默认应用程序
    rootEntry = ent.Children.Find("root", "IIsWebVirtualDir");
  }
  else
  {
    //如果网站在IIS不存在,那么我们需要首先在IIS中创建该网站,并且为该网站创建一个root应用程序
    string entPath = string.Format("IIS://{0}/w3svc", Host);
    DirectoryEntry root = GetDirectoryEntry(entPath);
    string newSiteNum = GetNewWebSiteID();
    DirectoryEntry newSiteEntry = root.Children.Add(newSiteNum, "IIsWebServer");
    newSiteEntry.CommitChanges();
    newSiteEntry.Properties["ServerBindings"].Value = host + ":" + port + ":" + webSiteDesc;
    newSiteEntry.Properties["ServerComment"].Value = webSiteComment;
    newSiteEntry.CommitChanges();
    rootEntry = newSiteEntry.Children.Add("root", "IIsWebVirtualDir");
    rootEntry.CommitChanges();
    rootEntry.Properties["Path"].Value = webSitePath;
    rootEntry.Properties["AppPoolId"].Value = appPool;
    rootEntry.Properties["AccessRead"][0] = true; // 勾选读取
    rootEntry.Properties["AuthFlags"][0] = 1+4; 
    //勾选匿名访问和windows身份验证
    /** 标志
    标志名AuthBasic
    描述指定基本身份验证作为可能的 
    Windows 验证方案之一,返回给客户端作为有效验证方案。
    配置数据库位掩码标识符MD_AUTH_BASIC
    十进制值2
    十六进制值0x00000002
    
    标志名AuthAnonymous
    描述指定匿名身份验证作为可能的 
    Windows 验证方案之一,返回给客户端作为有效验证方案。
    配置数据库位掩码标识符MD_AUTH_ANONYMOUS
    十进制值1
    十六进制值0x00000001
    
    标志名AuthNTLM
    描述指定集成 Windows 
    身份验证(也称作质询/响应或 NTLM 验证)作为可能的 Windows 验证方案之一,返回给客户端作为有效验证方案。
    配置数据库位掩码标识符MD_AUTH_NT
    十进制值4
    十六进制值0x00000001
 
    标志名AuthMD5
    描述指定摘要式身份验证和高级摘要式身份验证作为可能的 Windows 
    验证方案之一,返回给客户端作为有效验证方案。
    配置数据库位掩码标识符MD_AUTH_MD5
    十进制值16
    十六进制值0x00000010
    
    标志名AuthPassport
    描述true 的值表示启用了 Microsoft .NET Passport 身份验证。 详细信息,请参阅 .NET Passport 验证。
    配置数据库位掩码标识符MD_AUTH_PASSPORT
    十进制值64
    十六进制值0x00000040
    */
    rootEntry.Properties["DontLog"][0] = true;
    rootEntry.Properties["AuthAnonymous"][0] = true;
    rootEntry.Properties["AnonymousUserName"][0] =
    XmlSettings.GetWebXmlSettingString("IISAnonymousUserName");
    
    /*这里AnonymousUserPass属性如果不去设置,IIS会自动控制匿名访问账户的密码。之前我尝试将匿名访问用户的密码传给网站,之后发现创建出来的网站尽管勾选的匿名访问并且设置了匿名用户密码,浏览的时候还是提示要输入密码,很是纠结*/
    rootEntry.Invoke("AppCreate", true);
    rootEntry.CommitChanges();
  }
  DirectoryEntry de = rootEntry.Children.Add(friendlyName, rootEntry.SchemaClassName);
  de.CommitChanges();
  de.Properties["Path"].Value = virtualPath;
  de.Properties["AccessRead"][0] = true; // 勾选读取
  de.Invoke("AppCreate", true);
  de.Properties["EnableDefaultDoc"][0] = true;
  de.Properties["AccessScript"][0] = true; // 脚本资源访问
  de.Properties["DontLog"][0] = true; // 勾选记录访问
  de.Properties["ContentIndexed"][0] = true; // 勾选索引资源
  de.Properties["AppFriendlyName"][0] = friendlyName; //应用程序名
  de.Properties["AuthFlags"][0] = 5;
  /*这里在创建虚拟路径时不需要再次设置匿名访问,因为网站下的虚拟路径会默认接受网站的访问限制设置*/
  de.CommitChanges();
}
catch (Exception e)
{
  throw e;
}
 
public string GetNewWebSiteID()
{
  ArrayList list = new ArrayList();
  string tempStr;
  string entPath = string.Format("IIS://{0}/w3svc",Host);
  DirectoryEntry ent = GetDirectoryEntry(entPath);
  foreach (DirectoryEntry child in ent.Children)
  {
    if (child.SchemaClassName == "IIsWebServer")
    {
      tempStr = child.Name.ToString();
      list.Add(Convert.ToInt32(tempStr));
    }
  }
  list.Sort();
  var newId = Convert.ToInt32(list[list.Count - 1]) + 1;
  return newId.ToString();
}
 
public DirectoryEntry GetDirectoryEntry(string entPath)
{
  DirectoryEntry ent;
  if (string.IsNullOrEmpty(UserName))
  {
    ent = new DirectoryEntry(entPath);
  }
  else
  {
    ent = new DirectoryEntry(entPath, Host + "\\" + UserName, Password, AuthenticationTypes.Secure);
  }
  return ent;
}
 
public DirectoryEntry EnsureNewWebSiteAvailable(string bindStr)
{
  string entPath = string.Format("IIS://{0}/w3svc",Host);
  DirectoryEntry ent = GetDirectoryEntry(entPath);
  foreach (DirectoryEntry child in ent.Children)
  {
    if (child.SchemaClassName == "IIsWebServer")
    {
      if (child.Properties["ServerBindings"].Value != null)
      {
        if (child.Properties["ServerBindings"].Value.ToString() == bindStr)
        { return child; }
      }
    }
  }
  return null;
} 
原创粉丝点击