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

news/2024/5/12 17:58:06/文章来源:https://blog.csdn.net/xianjian1990/article/details/78747074

转自: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;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_867184.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用github.io(githubPages)免费托管个人静态网站/个人博客

我们的个人博客或者静态网站可以托管到github就能通过github域名访问 git仓库配置 我采用的是自己编写一个html文件githubPages搭建,首先需要在GitHub上创建Github Pages服务,具体步骤如下图: 点击之后仓库名一定要填 用户名.github.io 的格…

由SG807 傻瓜式自助建站系统

傻瓜式自助建站系统 - 是由SG807开发维护的企业免费傻瓜式自助建站系统。使用该套系统可以帮助大中小型企业快速建立自己的企业网站,且本站承诺该系统永久免费。 该系统采用PHPMYSQL开发,故在使用此系统前请准备好您的域名、PHP网站空间和MYSQL数据库空间…

大神之路-Android优质学习资源、项目和网站大整合(Android学习以来的全面资料整理)

大神之路-Android优质学习资源和项目大整合 Android非常不错的学习资源、项目和网站其实非常多,但是大部分计较不集中,不利于新手对Android的学习和整体把握。今天刚好有空,把自己学习Android以来熟悉的和平时常访问的网站资料做一下整理&…

用CA实现通过https(或443端口)访问网站

在Windows环境下,CA被分为企业CA和独立CA,他们之间的区别如下: ①企业CA:要求域环境,负责为域中的用户和计算机颁发证书;由于域用户在登录过程中已经进行了身份验证,因而域用户向企业CA申请证书…

通过设置主机名的方式实现在web服务器上同时运行多个网站

通过设置主机名的方式实现在web服务器上同时访问多个网站 准备:虚拟机三台,分别作为DNS服务器、WEB服务器、客户端 DNS服务器:IP 192.168.118.1 WEB服务器:IP 192.168.118.2 首选DNS:192.168.118.1 客户端&#xff1…

HTML div标签内部组件导致onmouseout事件调用问题

这几天一直纠结于一个html页面上的bug, 我们前台框架是ICEFaces3.1, 这些无所谓,翻译出来都是html标签 问题表述: 情况是我的一个div里套了很多ul和li标签,我在这个外层的div里放了一个onmouseout鼠标事件&#xf…

为 Web 项目“XXX”配置的 URL“http://localhost/”的网站同时存在于本地 IIS Web 服务器和 IIS Express

问题: 用记事本打开MVC网站的项目文件(*.csproj),滚动条拉到最下 并对属性进行设置

Python——爬取小说网站的整本小说

编译环境:pycharm 需要的库:requests,lxml,bs4,BeautifulSoup,os 思路如下: 首先可以先建立一个文件,使用os库中的os.makedirs("文件名; if not os.path.exists("福妻高照"):os.makedirs("福妻…

Mac使用SSH访问公司内网网站

在公网或者在家里如何访问公司内部网站? 其实一个方案是:使用ssh,socket代理进行访问。 当然如果公司有相关的隧道,那直接使用隧道进行连接访问。 需求背景如下: 本地电脑(或者家里或者公网) -> 连接公司内网的网站(http://192…

研发高频软件,工具,网站,体验飞一般的感觉。

直入主题 看一下阿里系研发流程举例,这基本上也是互联网大厂的研发流程了。 Tip:如果从开发的角度去总结的话就会跳过一些软件,比如提出需求这个其实一般都是文档类的,wiki这样的形式。 概要设计: 概要设计&#x…

洗礼灵魂,修炼python(67)--爬虫篇—cookielib之爬取需要账户登录验证的网站

学完前面的教程,相信你已经能爬取大部分的网站信息了,但是当你爬的网站多了,你应该会发现一个新问题,有的网站需要登录账户才能看到更多的信息对吧?那么这种网站怎么爬取呢?这些登录数据就是今天要说的——…

做网站优化运营,如何才能获得优质的外链呢?

昨天冬镜给大家讲到网站优化中外链会对关键词排名产生影响,想必大家都在思考怎么去获得外链,而外链又分为普通外链和优质外链,垃圾外链肯定不是我们想要获得的。今天,冬镜就和大家聊聊在做网站优化中如何获得优质的外链&#xff1…

外链对网站优化中的关键词排名影响有多大?

近年来,随着搜索引擎算法的不算升级,很多站长认为做网站优化的难度越来越大,关于这一点呢,冬镜也不知道说什么好。网站优化之所以越来越难,一方面是因为算法升级,钻算法漏洞的机会越来越少,一部分人就认为网…

2019年最新最全的医疗网站优化方案

今天冬镜就给大家讲讲2019年医疗网站应该如何优化? 医疗网站相比其他行业来说优化难度会更大,尤其是在百度魏则西事件后,医疗网站排名就出现了百度人工干预网站排名。 现在基本上随便搜索一个地域性的医疗关键词,你会发现百度首页…

seo是什么?学好seo有什么用呢?

SEO(Search Engine Optimization):搜索引擎优化,即是利用搜索引擎的搜索算法规则来提高网站的自然排名 一、seo是什么 答:小编认为seo是指在了解搜索引擎优化自然排名算法的基础上,对网站进行内部和外部的…

【冬镜网】2019年应该如何衡量网站优化运营效果?

做过网站优化运营的站长应该都清楚,最终是需要衡量网站优化的工作成效,那么,大家清楚网站优化效果应该如何衡量吗?今天,冬镜就和大家一起聊聊怎么衡量网站优化的效果。 一、什么是网站优化 网站优化其实有可以叫做搜索…

网站不收录怎么办,试试冬镜教你的这几招!

博客停更了快四个月了,或许是冬镜堕落了吧,今天和大家聊聊网站收录的问题。今年做网站优化聊得最多的就是收录问题,目前这个问题算是网站优化行业最头疼的。导致网站不收录的原因也是有很多,百度搜索引擎频繁出故障(索…

2021年垃圾网站为什么还受搜索引擎偏爱?

2021年在大不分网站都不收录,排名差的情况下,为什么搜索引擎还是在乎垃圾网站?主要原因在于对垃圾网站的打击上,SEO人员缺乏足够的认识。 1、什么是垃圾网站? 一个笼统的说法就是网站质量差的就是垃圾网站。那怎么评判…

网站优化中为什么说排名第一就是品牌?

何为品牌?是指用户对产品及产品系列的认知程度。品牌的本质是品牌拥有者的产品、服务或其它优于竞争对手的优势能为目标用户带去同等或高于竞争对手的价值。通俗一点来说,就是让别人能快速对你有印象。 1、为什么要做品牌 这里冬镜要提醒一下大家&#…

2021年新手做seo怎么做,几大绝招快速上排名收录

五一了,冬镜在这里先祝大家节日快乐。今年在各大站长群、论坛等圈子看到大家聊到最多的还是收录排名的问题,特别是今年,算法更新没去年频繁,但是优化却十分不稳定,很多网站都经历暴跌暴涨,很多刚入行的SEO从…