首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> .NET 實例教學

ASP.NET 2.0 實作網站二級域名 (泛域名) 完整方案

     編輯:.NET 實例教學

為了讓使用者擁有個人化網址 (如 `user1.example.com`、`shop.example.com`),ASP.NET 2.0 可透過 DNS 泛解析 + IIS 主機標頭綁定 + URL Rewrite + Profile/Session 實現真二級域名存取。本文整理兩種主流架構:單站點重導向 (簡易) 與 雙站點真二級域名 (完整)。

基礎設施準備

  1. DNS 泛解析:新增 A 記錄 `*.example.com` 指向伺服器公網 IP。
  2. IIS 網站綁定:依架構不同設定主機標頭 (見下)。
  3. 應用程式集區:建議獨立集區,啟用 .NET 2.0/3.5 整合模式。

架構一:單站點 + 重導向 (偽二級域名,適合簡單專案)

IIS 設定

  • 單一網站,IP 綁定,**主機標頭留空** (捕獲所有未匹配主機標頭的請求)。
  • 預設文件:`Default.aspx`。

核心程式碼 (`Default.aspx.cs` `Page_Load`)

public void CheckDomain() {
    string host = Request.Url.Host.ToLower(); // 取得完整主機名
    string[] parts = host.Split('.');         // 以 . 分割

    // 基本格式驗證:sub.example.com → parts.Length == 3
    if (parts.Length > 3) {
        Response.Redirect("https://www.example.com/Error.aspx");
        return;
    }

    string subDomain = parts[0]; // 取得二級域名 (user1)

    // 排除保留字
    string[] reserved = { "www", "mail", "ftp", "example", "" };
    if (Array.Exists(reserved, r => r == subDomain)) {
        // 存取主站邏輯,或重導向至首頁
        return;
    }

    // 重導向至使用者區 (偽二級域名,網址列會變)
    Response.Redirect("/User/?uid=" + subDomain);
}

缺點:瀏覽器網址列會變成 `www.example.com/User/?uid=user1`,**非真二級域名**,SEO 與使用者體驗較差。

架構二:雙站點 + URL Rewrite (真二級域名,生產環境推薦)

IIS 設定

站點主機標頭實體路徑預設文件
主站點`www.example.com`, `example.com``D:\Web\Main``Default.aspx`
二級域站點**留空** (捕獲所有 `*.example.com`)`D:\Web\Main` (同目錄)`Index.aspx`

二級域站點 `Index.aspx.cs`:擷取子域名存入 Profile/Session

public void CaptureSubDomain() {
    string host = Request.Url.Host.ToLower();
    string[] parts = host.Split('.');
    if (parts.Length > 3) { Response.Redirect("https://www.example.com/Error.aspx"); return; }

    string sub = parts[0];
    string[] reserved = { "www", "example", "" };
    if (Array.Exists(reserved, r => r == sub)) { /* 主站邏輯 */ return; }

    // 存入 Profile (ASP.NET 2.0 新功能,自動持久化)
    Profile.SubDomain = sub;
    // 或存入 Session
    Session["SubDomain"] = sub;

    // 重導向至使用者區首頁 (相對路徑,配合 Rewrite 保持網址)
    Response.Redirect("~/User/");
}

`web.config` URL Rewrite 規則 (需安裝 Microsoft URL Rewriter 或 IIS 7+ 內建 Rewrite Module)

<rewriter>
  <!-- 根目錄 Index.aspx → 使用者區首頁 -->
  <rewrite url="^~/Index\.aspx$" to="~/User/Default.aspx" />

  <!-- 使用者區所有頁面保持二級域名網址 -->
  <rewrite url="^~/User/(.+)\.aspx$" to="~/User/$1.aspx" />
  <!-- 亦可寫成通用規則:^/User/(.*)$ → /User/$1 -->
</rewriter>

IIS 7+ `web.config` 寫法:

<system.webServer>
  <rewrite>
    <rules>
      <rule name="SubDomainRoot" stopProcessing="true">
        <match url="^Index\.aspx$" />
        <action type="Rewrite" url="User/Default.aspx" />
      </rule>
      <rule name="SubDomainPages" stopProcessing="true">
        <match url="^User/(.+)" />
        <action type="Rewrite" url="User/{R:1}" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>

使用者區頁面 (`User/Default.aspx`) 讀取子域名

string sub = Profile.SubDomain; // 或 Session["SubDomain"]
// 顯示歡迎訊息、查詢該使用者資料...
lblWelcome.Text = "歡迎 " + sub + " 光臨!";

關鍵細節與坑點

  • Cookie 域名共享:`` 讓主站與二級域共享登入 Cookie。
  • SiteMap 多語言/多租戶:需動態 `SiteMapProvider` 或依子域名載入不同 `.sitemap`。
  • SSL 憑證:需萬用憑證 (`*.example.com`) 或 Let's Encrypt 泛域名憑證,否則 HTTPS 會憑證錯誤。
  • 效能:雙站點共用 `AppDomain` 若未分離集區,記憶體隔離度較低;流量大建議分離實體路徑/集區。
  • ASP.NET Core 時代:改用 Middleware 攔截 `HttpContext.Request.Host`,配合 `MapWhen`/`Map` 分支,無需雙站點/URL Rewrite,架構更乾淨。

總結選型指南

需求推薦架構
快速原型、內部工具、不介意網址變化架構一:單站點重導向
正式產品、SEO 重要、使用者體驗優先架構二:雙站點 + URL Rewrite
新專案、.NET Core / 5+Middleware 架構 (無需 IIS 特殊設定)

正確實作二級域名,關鍵在於 DNS → IIS 綁定 → 擷取 Host → 持久化身分 → URL Rewrite 保持網址 這條鏈路環環相扣。建議先在測試環境完整跑通流程再上線。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved