.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 URL),
相關的標準可以看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
注意:檔案路徑的分隔符號為反斜線「\」,網址路徑為正斜線「/」
參考資料:
[FileUpload]檔案上傳,Server端存放路徑的三種寫法(上集 Ch. 18)
ASP.NET 如何取得 Request URL 的各個部分
可不看