.NET 路徑寫法 URL path

 

一、我有一個html網頁,放在服務端使用webBrowser去瀏覽,

可以正常執行,但對於直接存成.html檔於本機端直接執行卻無法正常執行,

這是為什麼呢?

<html>
<head>
    <meta charset="utf-8">
    <title>CKEditor</title>
    <script src="//cdn.ckeditor.com/4.4.6/standard/ckeditor.js"></script>
</head>
<body>
    <textarea name="editor1"></textarea>
    <script>
        CKEDITOR.replace('editor1');
    </script>
</body>
</html>

原因出在於該段讀取網路資源的Script

<script src="//cdn.ckeditor.com/4.4.6/standard/ckeditor.js"></script>

該段使用「//」相對URL來讀取網路資源。

以下引用一段文章看了之後就明白了。

以// 開頭的叫做相對URL(protocol-relative UR​​L),

相關的標準可以看RFC 3986 Section 4.2,

內容不是一般的長估計大家也沒耐心去看吧。

總之瀏覽器遇到相對URL,則會根據當前的網頁協議,

自動在// 前面加上相同的協議。如當前網頁是http 訪問,

那麼所有的相對引用// 都會變成http://。 https 同理。

如果你在本地查看,協議就會變成file://。

 

看完之後就明瞭如何在本機正確執行.html檔了,

原始碼修改如下

<html>
<head>
    <meta charset="utf-8">
    <title>CKEditor</title>
    <script src="http://cdn.ckeditor.com/4.4.6/standard/ckeditor.js"></script>
</head>
<body>
    <textarea name="editor1"></textarea>
    <script>
        CKEDITOR.replace('editor1');
    </script>
</body>
</html>

二、URL詳細說明

1、忽略scheme

如同potocol-relative URL

<script src="//cdn.ckeditor.com/4.4.6/standard/ckeditor.js"></script>

 

2、忽略scheme與authority

範例:

(1)、同目錄下的 step2.aspx 頁面

step2.aspx

 

(2)、網站根目錄下的 index.aspx 頁面

/index.aspx

 

(3)、上層目錄的 sitemap.aspx 頁面

../sitemap.aspx

 

(4)、上兩層目錄的 default.htm 頁面

../../default.htm

 

(5)、上層目錄下的 images 目錄下的 dot 目錄下的 red.gif 檔案

../images/dot/red.gif

 

3、忽略scheme與authority與path

範例:

(1)、跳到第 2 頁

<a href="?pageNo=2">第 2 頁</a>

 

(2)、變更 sortby 參數的值

<a href="?sortby=filesize">File Size</a>

 

4、忽略scheme與authority與path與query

範例:<a href="#top">Top</a>

 

三、.NET後端路徑寫法

1、web Server電腦上的實體絕對路徑

String savePath = "c:\\temp\\uploads\\";

 

2、網站上的 URL路徑。 Server.MapPath() 轉換成Web Server電腦上的硬碟「實體」目錄

String savePath = Server.MapPath("~/Book_Sample/Ch18_FileUpload/Uploads/");

紅色「~」將會自動轉為網站實體跟目錄資料夾,如:Server.MapPath("~")

則結果為c:\Inetpub\wwwroot\myApp\

「/」 為ServerRoot

「~/」 為WebSite Root

 

注意:檔案路徑的分隔符號為反斜線「\」,網址路徑為正斜線「/」

 

參考資料:

講解 URL 結構與分享幾個相對路徑與絕對路徑的開發技巧

[FileUpload]檔案上傳,Server端存放路徑的三種寫法(上集 Ch. 18)

利用Server.mapPath()取得網站相關路徑(HttpContext.Current.Server.MapPath,路徑,根目錄,目前應用程式,上一層,類別,vb,HttpContext.Current.Server.MapPath))

ASP.NET 中得到网站绝对路径的几种方法

ASP.NET 如何取得 Request URL 的各個部分

可不看

关于 URL 中协议的省略

Google HTML/CSS代码风格指南