【问题标题】:How do I configure extensionless URLs with the Visual Web Development server?如何使用 Visual Web Development 服务器配置无扩展 URL?
【发布时间】:2010-10-02 07:59:03
【问题描述】:
我正在使用 Visual Studios 的内置 ASP.NET 开发服务器 (VWD) 在开发过程中测试我的网站。
我希望这个 ASP.NET 网站使用无扩展名 URL(页面不需要 aspx 扩展名)。通常我会在 IIS 中配置一个指向 ASPX 页面的自定义 404。我将如何使用 VWD 做到这一点?
附注这不是一个 ASP.NET MVC 网站。
【问题讨论】:
标签:
asp.net
url
url-rewriting
vwdexpress
【解决方案1】:
这是一个使用 UrlRewritingNet 的 Web.Config 示例。这样做将允许您进行无扩展重写,而无需编写任何 HttpModule 或类似的东西。
(全文here)
注意:这需要 IIS7,因为它使用 web.config 的 system.webServer 部分。
<configSections>
<section name="urlrewritingnet"
restartOnExternalChanges="true"
requirePermission="false"
type="UrlRewritingNet.Configuration.UrlRewriteSection, UrlRewritingNet.UrlRewriter" />
</configSections>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
</modules>
</system.webServer>
<urlrewritingnet rewriteOnlyVirtualUrls="true"
contextItemsPrefix="QueryString"
xmlns="http://www.urlrewriting.net/schemas/config/2006/07">
<rewrites>
<!--Enable HTM(L) Extensions-->
<add name="pageHTML"
virtualUrl="^~/(.+).htm(.*)"
redirectMode="Permanent"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/$1.aspx"
ignoreCase="true" />
<!--Fix the WebResource JS Error-->
<add name="WebResourceFix"
virtualUrl="^~/WebResource.axd(.*)"
rewriteUrlParameter="IncludeQueryStringForRewrite"
destinationUrl="~/WebResource.axd$1"
ignoreCase="true"/>
<!--Fix the ScriptResource JS Error-->
<add name="ScriptResource"
virtualUrl="^~/ScriptResource.axd(.*)"
rewriteUrlParameter="IncludeQueryStringForRewrite"
destinationUrl="~/ScriptResource.axd$1"
ignoreCase="true"/>
<!--Allow Extensionless Page Extensions-->
<add name="pageExtensionless"
virtualUrl="^~/(.+)$"
redirectMode="Permanent"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/$1.aspx"
ignoreCase="true" />
</rewrites>
</urlrewritingnet>
【解决方案2】:
您无需做任何特别的事情。只需从 ASPX 页面文件中删除 .aspx 扩展名,它应该可以与 VWD 一起正常工作。 Visual Studio 设计者可能会抱怨没有为扩展 '' 注册构建提供程序,但您可以忽略它。然后你可以引用没有扩展名的页面:
http://localhost:2181/Default
<%@ Page Language="C#"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Hello World
</div>
</form>
</body>
</html>
【解决方案4】:
您需要做的就是在 web.config 中的两个不同位置添加模块...
<system.web>
<pages theme="Default" />
<httpModules>
<add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
</httpModules>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="UrlRewriteModule"/>
<add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
</modules>
</system.webServer>
第一个是将它添加到您的 httpModules 中,将在您的 VS 开发环境中工作,第二个将用于 IIS7