asp.net使用UrlRewriter.dll进行伪静态页面重写的问题 60
我的某一个页面,路径是localhost/MYSITECMS/5/15/42/default.aspx?Aid=45通过URL重写之后,路径是localhost/MYSI...
我的某一个页面,路径是
localhost/MYSITECMS/5/15/42/default.aspx?Aid=45
通过URL重写之后,路径是
localhost/MYSITECMS/5/15/42/d45.html
规则是这么写的:
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/5/15/42/d(\d+)\.html</LookFor>
<SendTo>~/5/15/42/default.aspx?Aid=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
但我有好几个文件夹,不能一个一个这么写啊,而且我对正则表达式不熟悉,请问我应该怎么样写,才能让所有的文件夹都适用这个规则?
注:这个虽然这个项目下有N个文件夹,但是每个文件夹下面都只有一个.aspx文件,就是default.aspx文件,请高手指点!
回答好的加分!
如果有人能写个~/(路径)default.aspx?xx=yy这样的规则,一旦验证没问题,加分并选为满意回答。 展开
localhost/MYSITECMS/5/15/42/default.aspx?Aid=45
通过URL重写之后,路径是
localhost/MYSITECMS/5/15/42/d45.html
规则是这么写的:
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/5/15/42/d(\d+)\.html</LookFor>
<SendTo>~/5/15/42/default.aspx?Aid=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
但我有好几个文件夹,不能一个一个这么写啊,而且我对正则表达式不熟悉,请问我应该怎么样写,才能让所有的文件夹都适用这个规则?
注:这个虽然这个项目下有N个文件夹,但是每个文件夹下面都只有一个.aspx文件,就是default.aspx文件,请高手指点!
回答好的加分!
如果有人能写个~/(路径)default.aspx?xx=yy这样的规则,一旦验证没问题,加分并选为满意回答。 展开
2个回答
展开全部
1.下载Intelligencia.UrlRewriter.dll文件 urlrewriter.net
2.添加引用
3.设置Web.Config配置文件
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/>
</configSections>
<rewriter>
<rewrite url="~/(.+).html$" to="~/Default.aspx?ID=$1" /> //即把$1的值给括号的地方
</rewriter>
<system.web>
<httpModules>
<add type="Intelligencia.UrlRewriter.RewriterHttpModule,Intelligencia.UrlRewriter" name="UrlRewriter"/>
</httpModules>
</system.web>
</configuration>
4.新建两个页面(Default.aspx,UrlRewtite.aspx)
Default.aspx界面
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("这是经过重写的~~~~~~~~~~");
}
}
UrlRewtite.aspx 界面
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestUrlRewrite.aspx.cs" Inherits="WebPractise.TestUrlRewrite" %>
<!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></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<a href="123.html">test</a>
</div>
</form>
</body>
</html>
5.用户看到的是浏览123.html,实际上是由Default.aspx界面 处理的。
注意:
当使用通配符映射或者使用ASP.NET处理所有HTTP请求的时候,IIS的默认文档机制也就失去了该有的作用,以下代码就是用来重新实现默认文档的方法:
<rewrite url="^(.*)/(\?.+)?$" to="$1/default.aspx$2" />注意:使用“processing="restart"”的时候将会导致重写引擎从头开始执行所有的重写规则,此时应当注重包含“/default.aspx”字符串的处理。
如果你需要同时支持多个默认文档,那么以上代码需要修改为:
<if url="^(.*)/(\?.+)?$"> <rewrite exists="$1/default.aspx" to="$1/default.aspx$2" /> <rewrite exists="$1/index.aspx" to="$1/index.aspx$2" /> <rewrite exists="$1/index.html" to="$1/index.html$2" /></if>编辑以上规则代码的时候,尤其要注意确认文件是否存在。
此外,在使用通配符映射或者使用ASP.NET处理所有HTTP请求的时候,你会发现.gif、.css等文件无法正常访问,这是因为此时对这些文件类型的处理都被ASP.NET所拦截。修正方法如下:
<rewrite url="^(/.+(\.gif|\.png|\.jpg|\.ico|\.css|\.js)(\?.+)?)$" to="$1" processing="stop" />两个比较特殊的正则表达式字符是“^”和“$”(不是必须的),“^”代表URL的开头,“$”代表URL的结尾。使用这两个符号可以使您更加精确的控制重写动作,以确保程序所匹配的URL正是您想处理的。
“~/”表示当前网站应用程序运行所在的虚拟根目录,当您把网站应用程序安装于虚拟目录(或者非根目录)的时候,这尤其有用,而无须重新编写任何代码来替换您的虚拟根路径。
模式匹配在处理查询字串(QueryStrings)的时候尤其有用,这可以让您的URL去掉类似于“?id=3”的代码段,这非常有用,可以让你轻松的实现伪静态。
下面列出两个我们认为非常有特色的重写规则:
(1) 当目标URL不包含自定义查询字串的时候:
<rewrite url="^~/mypage(\?.+)?$" to="~/default.aspx$1" />此时“$1”匹配的是(\?.+)?,也就是所有的查询字串。
(2) 当目标URL包含自定义查询字串的时候:
<rewrite url="^~/mypage(\?(.+))?$" to="~/default.aspx?page=mypage&$2" />注意此时需要使用“&”来代替“&”,这是XML文档语法的需要。
2.添加引用
3.设置Web.Config配置文件
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/>
</configSections>
<rewriter>
<rewrite url="~/(.+).html$" to="~/Default.aspx?ID=$1" /> //即把$1的值给括号的地方
</rewriter>
<system.web>
<httpModules>
<add type="Intelligencia.UrlRewriter.RewriterHttpModule,Intelligencia.UrlRewriter" name="UrlRewriter"/>
</httpModules>
</system.web>
</configuration>
4.新建两个页面(Default.aspx,UrlRewtite.aspx)
Default.aspx界面
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("这是经过重写的~~~~~~~~~~");
}
}
UrlRewtite.aspx 界面
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestUrlRewrite.aspx.cs" Inherits="WebPractise.TestUrlRewrite" %>
<!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></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<a href="123.html">test</a>
</div>
</form>
</body>
</html>
5.用户看到的是浏览123.html,实际上是由Default.aspx界面 处理的。
注意:
当使用通配符映射或者使用ASP.NET处理所有HTTP请求的时候,IIS的默认文档机制也就失去了该有的作用,以下代码就是用来重新实现默认文档的方法:
<rewrite url="^(.*)/(\?.+)?$" to="$1/default.aspx$2" />注意:使用“processing="restart"”的时候将会导致重写引擎从头开始执行所有的重写规则,此时应当注重包含“/default.aspx”字符串的处理。
如果你需要同时支持多个默认文档,那么以上代码需要修改为:
<if url="^(.*)/(\?.+)?$"> <rewrite exists="$1/default.aspx" to="$1/default.aspx$2" /> <rewrite exists="$1/index.aspx" to="$1/index.aspx$2" /> <rewrite exists="$1/index.html" to="$1/index.html$2" /></if>编辑以上规则代码的时候,尤其要注意确认文件是否存在。
此外,在使用通配符映射或者使用ASP.NET处理所有HTTP请求的时候,你会发现.gif、.css等文件无法正常访问,这是因为此时对这些文件类型的处理都被ASP.NET所拦截。修正方法如下:
<rewrite url="^(/.+(\.gif|\.png|\.jpg|\.ico|\.css|\.js)(\?.+)?)$" to="$1" processing="stop" />两个比较特殊的正则表达式字符是“^”和“$”(不是必须的),“^”代表URL的开头,“$”代表URL的结尾。使用这两个符号可以使您更加精确的控制重写动作,以确保程序所匹配的URL正是您想处理的。
“~/”表示当前网站应用程序运行所在的虚拟根目录,当您把网站应用程序安装于虚拟目录(或者非根目录)的时候,这尤其有用,而无须重新编写任何代码来替换您的虚拟根路径。
模式匹配在处理查询字串(QueryStrings)的时候尤其有用,这可以让您的URL去掉类似于“?id=3”的代码段,这非常有用,可以让你轻松的实现伪静态。
下面列出两个我们认为非常有特色的重写规则:
(1) 当目标URL不包含自定义查询字串的时候:
<rewrite url="^~/mypage(\?.+)?$" to="~/default.aspx$1" />此时“$1”匹配的是(\?.+)?,也就是所有的查询字串。
(2) 当目标URL包含自定义查询字串的时候:
<rewrite url="^~/mypage(\?(.+))?$" to="~/default.aspx?page=mypage&$2" />注意此时需要使用“&”来代替“&”,这是XML文档语法的需要。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你只要将5/15/42也变成动态的即可,我一般这样写:
<rewriter>
<rewrite url="~/(\w+)/(\w+)/(\w+)/default.aspx?Aid=(\w+)" to="~/$1/$2/$3/$4.html" />
</rewriter>
纯手打,通配符和转义符你自己调整下,思路你应该明白了吧。
<rewriter>
<rewrite url="~/(\w+)/(\w+)/(\w+)/default.aspx?Aid=(\w+)" to="~/$1/$2/$3/$4.html" />
</rewriter>
纯手打,通配符和转义符你自己调整下,思路你应该明白了吧。
更多追问追答
追问
麻烦能不能在我现有的基础上修改一下?还有你这个标签插到哪里我都不清楚,最好你改好之后能给我简单讲一下,或者有说明的链接让我看看也行,不胜感激。
追答
http://urlrewriter.net/index.php/support
这个是组件的官网,这里有详细的文档。
注意这句“The pattern to match the current Location on. This pattern is a standard .NET regular expression.”,所以你可以随意的定义。
归根到底是一个正则表达式的问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询