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

URLRewriter 實現 ASP.NET 偽靜態:.aspx 轉 .html 的 IIS 與 Apache 雙平台配置指南

     編輯:ASP.NET 基礎

什麼是偽靜態?

將動態頁面(如 `/User/Default.aspx?link=123`)對外呈現為靜態風格 URL(如 `/123.html`),利於 SEO、書籤分享、隱藏技術細節。URLRewriter 是經典 .NET 組件,透過 HTTP Module 攔截請求、內部重寫路徑實現。

ASP.NET (IIS) 完整配置步驟

1. 部署組件

  • 下載 `URLRewriter.dll` 放入專案 `/bin` 目錄
  • 專案加入參考:右鍵 References → Add Reference → Browse 選取 DLL

2. IIS 映射 .html 到 ASP.NET 處理管線

IIS 6 / 傳統模式:

  1. 網站屬性 → 主目錄 → 配置 → 應用程式副檔名映射
  2. 新增:副檔名 `.html`,可執行檔 `C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll`
  3. 關鍵:取消勾選「驗證檔案是否存在」,否則 IIS 會直接 404

IIS 7+ 整合模式(推薦):在 `web.config` 直接配置,無需 IIS 介面操作:


<system.webServer>
  <handlers>
    <add name="HTMLHandler" path="*.html" verb="*" 
         type="System.Web.StaticFileHandler" preCondition="integratedMode" />
    <!-- 或對應到 ASP.NET 處理器 -->
    <add name="AspNetHtml" path="*.html" verb="*" 
         type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" />
  </handlers>
</system.webServer>

3. web.config 註冊 URLRewriter 模組與規則


<configSections>
  <section name="RewriterConfig" 
           type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>

<RewriterConfig>
  <Rules>
    <RewriterRule>
      <LookFor>~/(\d+)\.html</LookFor>
      <SendTo>~/User/Default.aspx?link=$1</SendTo>
    </RewriterRule>
    <!-- 更多規則... -->
  </Rules>
</RewriterConfig>

<system.web>
  <httpModules>
    <add name="URLRewriter" type="URLRewriter.ModuleRewriter, URLRewriter" />
  </httpModules>
  <httpHandlers>
    <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
    <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
  </httpHandlers>
</system.web>

<system.webServer> <!-- IIS 7+ -->
  <modules>
    <add name="URLRewriter" type="URLRewriter.ModuleRewriter, URLRewriter" preCondition="managedHandler" />
  </modules>
  <validation validateIntegratedModeConfiguration="false" />
</system.webServer>

4. 正則規則語法說明

  • `LookFor`:匹配外部請求 URL(含 `~/` 代表應用程式根目錄)
  • `SendTo`:內部重寫目標 URL,`$1`、`$2` 對應捕獲組
  • 支援完整 .NET 正則表達式

Apache (mod_rewrite) 同效果配置

1. 啟用模組

編輯 `conf/httpd.conf`,取消註釋或新增:

LoadModule rewrite_module modules/mod_rewrite.so

2. 虛擬主機或 .htaccess 寫入規則


<IfModule mod_rewrite.c>
  RewriteEngine On
  # /123.html -> /user.php?user=123
  RewriteRule ^/([0-9]+)\.html$ /user.php?user=$1 [L]
</IfModule>
  • `^`:開頭;`$`:結尾
  • `[L]`:Last,匹配後停止後續規則
  • 若使用虛擬主機,建議寫在 `VirtualHost` 區塊;共享主機放 `.htaccess`

3. 重啟 Apache 生效

# Ubuntu/Debian
sudo systemctl restart apache2
# CentOS/RHEL
sudo systemctl restart httpd

驗證測試

  • 瀏覽器訪問 `https://localhost/123.html`
  • 網路面板觀察:URL 不變,但伺服器內部處理 `/User/Default.aspx?link=123` 或 `/user.php?user=123`
  • 查看 IIS/Apache 日誌確認重寫生效

現代替代方案提示

  • ASP.NET Core:內建 `app.UseRewriter()` + `RewriteOptions`,無需第三方 DLL
  • IIS URL Rewrite Module 2.0:原生模組,效能更好,配置於 `web.config` `<rewrite>` 區段
  • ASP.NET MVC / Web API:使用 `RouteConfig` / `Attribute Routing` 直接設計乾淨 URL,無需偽靜態

總結

`URLRewriter` 是 ASP.NET 2.0/3.5 時代偽靜態的經典方案,核心在於 **IIS 映射副檔名 + HTTP Module 攔截重寫**。現代專案請優先採用原生路由或 IIS URL Rewrite 模組,僅在維護舊專案時使用本文配置。

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