对于想了解windows域名+虚拟目录(php)的读者,本文将是一篇不可错过的文章,我们将详细介绍虚拟域名配置,并且为您提供关于.NETCORE3.1虚拟目录404错误、apache虚拟目录、apac
对于想了解windows 域名+虚拟目录 (php)的读者,本文将是一篇不可错过的文章,我们将详细介绍虚拟域名配置,并且为您提供关于.NET CORE 3.1 虚拟目录 404 错误、apache 虚拟目录、apache 虚拟目录 403 错误问题、Asp.Net Core 中的“虚拟目录”的有价值信息。
本文目录一览:- windows 域名+虚拟目录 (php)(虚拟域名配置)
- .NET CORE 3.1 虚拟目录 404 错误
- apache 虚拟目录
- apache 虚拟目录 403 错误问题
- Asp.Net Core 中的“虚拟目录”
windows 域名+虚拟目录 (php)(虚拟域名配置)
1.修改windows 域名
c:\windows\system32\drivers\etc\hosts
127.0.0.1 localhost
192.168.0.100 abc
127.0.0.2 a
2.修改apache的虚拟目录
C:\xampp\apache\conf\extra\httpd-vhosts.conf
ServerName tradesns
DocumentRoot D:/tradesns
Options FollowSymLinks IncludesNOEXEC Indexes
DirectoryIndex index.html index.htm default.htm index.php default.php
AllowOverride all
Order Deny,Allow
Allow from all
ServerName a
DocumentRoot D:/tradesns2
Options FollowSymLinks IncludesNOEXEC Indexes
DirectoryIndex index.html index.htm default.htm index.php default.php
AllowOverride all
Order Deny,Allow
Allow from all
立即学习“PHP免费学习笔记(深入)”;
.NET CORE 3.1 虚拟目录 404 错误
如何解决.NET CORE 3.1 虚拟目录 404 错误
我们有一个由 IIS 托管的已发布的 .NET Core 3.1 网站。根文件夹(包含 DLL)是: c:\\qa\\web\\
否则我们有如下文件夹:
- c:\\qa\\web\\wwwroot\\css
- c:\\qa\\web\\wwwroot\\js
在 IIS 中,我们创建了一个名为“images”的虚拟目录。该网站可以通过 http://localhost
访问我们可以无误地查看单个文件:
- http://localhost/js/brand.js
- http://localhost/css/main.css
但是我们在尝试查看虚拟目录中的文件时得到 404:
http://localhost/images/foo.jpg
但是如果我们在 URL 中插入“/wwwroot”,我们可以毫无问题地看到虚拟目录的内容:
http://localhost/wwwroot/images/foo.jpg
为什么我们在 URL 中需要“wwwroot/”?当我们从 Visual Studio / IIS Express 运行同一个网站时,我们不需要 URL 中的“wwwroot/”来查看 /images/foo.jpg
我想如果我们将虚拟目录别名设置为“wwwroot/images”可能会起作用,但它不允许别名中包含斜杠字符。
解决方法
确保在站点级别创建虚拟目录。 看起来它嵌套在 wwwroot 文件夹中。 试试这个 - 右键单击站点 --> 添加虚拟目录 --> 别名:图像,物理路径:c:\\qa\\web\\wwwroot。在此之后,您应该在 http://localhost/images/js/brand.js、http://localhost/images/css/main.css 等下访问图像。
如果没有帮助,请考虑将静态文件保存在应用程序根文件夹之外的不同文件夹中,并创建与之链接的虚拟目录。
apache 虚拟目录
apache 虚拟目录可以为网络路径吗?类似下面这样
Alias /raid "//cnetos/Public/yum/"
<Directory "//centos/Public/yum">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Order allow,deny
Allow from All
Require all granted
</Directory>
apache 虚拟目录 403 错误问题
Alias /raid "smb://192.168.0.218/Public/public/yum/"
<Directory "smb://192.168.0.218/Public/public/yum/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from All
Require all granted
</Directory>
为什么我这样配置虚拟目录 报 403 错误,但是当虚拟目录对应的物理路径为本地路径的时候可以正常访问
Asp.Net Core 中的“虚拟目录”
写在前面
现在部署Asp.Net Core应用已经不再限制于Windows的IIS上,更多的是Docker容器、各种反向代理来部署。也有少部分用IIS部署的,IIS部署确实是又快又简单,图形化操作三下五除二就可以发布好一个系统了。在过去Asp.Net MVC 项目部署的时候,还常常使用IIS一个功能——虚拟目录。
虚拟目录可以直接定位到非项目的其他路径,将路径作为网站的一部分,可实现上传文件保存到其他盘符或间接的使用项目以外的静态文件。在Asp.Net MVC中从虚拟路径中存取文件也很简单,如 Server.MapPath("~/Upload/liohuang.jpg");
但在Asp.Net Core上不同,它被抽象出一个“文件系统”,也就是FileProvider。FileProvider是对所有实现了IFileProvider接口的所有类型以及对应对象的统称,在Artech蒋老师的《.NET Core的文件系统[2]:FileProvider是个什么东西?》文章中已经透析了,这里不在罗里吧嗦了。
这篇文章要解决的内容是:Asp.Net Core应用中,如何优雅的使用“虚拟目录”。
实操
首先,新建一个.Net Core WebApi空项目,这里物理路径在F盘,分别创建三个测试目录: F:/test1 、 F:/test2 和 F:/test3 ,目录里分别存放对应的文件 1/2/3.jpg 和 mybook.txt 。
读取虚拟目录文件
在 Startup.ConfigureServices 注入 IFileProvider :
services.AddSingleton<IFileProvider>(new PhysicalFileProvider("F:\\test1"));
新建一个控制器,读取 mybook.txt 中的内容:
[ApiController] [Route("[controller]/[action]")] public class LioHuangController : ControllerBase { [HttpGet] public object GetFiles([FromServices]IFileProvider fileProvider) { var file = fileProvider.GetFileInfo("mybook.txt"); if (file.Exists) { return ReadTxtContent(file.PhysicalPath); } return 0; } /// <summary> /// 读取文本 (原文地址:https://www.cnblogs.com/EminemJK/p/13362368.html) /// </summary> private string ReadTxtContent(string Path) { if (!System.IO.File.Exists(Path)) { return "Not found!"; } using (StreamReader sr = new StreamReader(Path, Encoding.UTF8)) { StringBuilder sb = new StringBuilder(); string content; while ((content = sr.ReadLine()) != null) { sb.Append(content); } return sb.ToString(); } } }
访问接口,接口读取文件之后,返回内容:
IFileProvider 接口采用目录来组织文件,并统一使用 IFileInfo 接口来表示, PhysicalPath 表示文件的物理路径。
public interface IFileInfo { bool Exists { get; } bool IsDirectory { get; } DateTimeOffset LastModified { get; } string Name { get; } string PhysicalPath { get; } Stream CreateReadStream(); }
如多个虚拟目录,怎么处理?简单,注入多个 IFileProvider 即可,
services.AddSingleton<IFileProvider>(new PhysicalFileProvider("F:\\test1")); services.AddSingleton<IFileProvider>(new PhysicalFileProvider("F:\\test2")); services.AddSingleton<IFileProvider>(new PhysicalFileProvider("F:\\test3"));
代码修改为:
public object GetFiles([FromServices] IEnumerable<IFileProvider> fileProviders)
IEnumerable<IFileProvider> fileProviders 接口数组将会有三个,按注入的顺序对应不同的目录。当然,注入 IFileProvider 的时候,就可以封装一层了,下面再讲。
另外,有的说直接 ReadTxtContent("F:\test1\mybook.txt"); 不香吗?香,Asp.Net Core的访问权限要比Asp.Net MVC之前老版本项目要高许多,确实是可以直接读取项目以外的文件,但是并不适合直接去访问,除非说你只有一个地方使用到,那么就可以直接读取,但静态的文件的访问,就访问不到了,仅仅是后台读取而已。所以统一使用 IFileProvider 来约束,代码的可维护性要高许多。
静态文件访问
在Startup.Configure设置静态文件目录,即可:
app.UseStaticFiles(new StaticFileOptions() { FileProvider = new PhysicalFileProvider("F:\\test1"), RequestPath = "/test" });; app.UseStaticFiles(new StaticFileOptions() { FileProvider = new PhysicalFileProvider("F:\\test2"), RequestPath = "/test" }); app.UseStaticFiles(new.........
今天关于windows 域名+虚拟目录 (php)和虚拟域名配置的分享就到这里,希望大家有所收获,若想了解更多关于.NET CORE 3.1 虚拟目录 404 错误、apache 虚拟目录、apache 虚拟目录 403 错误问题、Asp.Net Core 中的“虚拟目录”等相关知识,可以在本站进行查询。
本文标签: