这样的URLRewriter重写正则怎么写?

net205 2011-08-11 08:07:27
在使用URLRewriter.dll时, 我想需要达到以下要求,请问正则怎么写??

站点下有Abc目录,Abc目录有很多123.html,43.html,989898.html与abc454.html,abc222222223.html,abc10.html
就是以数字为文件名的html文件和以abc开头加数字为文件名的html文件。

现在些目录下的文件很多,达到几万个,将来可能超过10万个。 所以想分目录,比如以文件名的后4位命名子目录,把文件放入子目录,不足4位的前面为0,例如:
Abc\123.html -> Abc\0123\123.html
Abc\43.html -> Abc\\0043.html
Abc\989898.html -> Abc\9898.html

请头号URLRewriter正则怎么写??
~/Abc/(\d+)\.html
->
???
...全文
150 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
net205 2011-08-12
  • 打赏
  • 举报
回复
<LookFor>的,这个正则好写,能写出来
但<SendTo>正则写不出来,困难在于:
1、取正则中某个匹配表达式中后4位
2、如果不到4位要补0
net205 2011-08-12
  • 打赏
  • 举报
回复
to LMAOhuaNL:
完全不符合我要求, 是不是没明白我意思??

to wxr0323:
你给的是自己写一个httpHandlers

我想要的仅仅是正则, 使用微软现有的URLRewriter.dll编写正则达到我这个要求。
类似http://msdn.microsoft.com/en-us/library/ms972974.aspx中的:
<RewriterRule>
<LookFor>~/(\d{4})/(\d{2})/(\d{2})\.aspx</LookFor>
<SendTo>~/ShowBlogContent.aspx?year=$1&month=$2&day=$3</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/(\d{4})/(\d{2})/Default\.aspx</LookFor>
<SendTo><![CDATA[~/ShowBlogContent.aspx?year=$1&month=$2]]></SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/(\d{4})/Default\.aspx</LookFor>
<SendTo>~/ShowBlogContent.aspx?year=$1</SendTo>
</RewriterRule>

net205 2011-08-12
  • 打赏
  • 举报
回复
to huangwenquan123,truecoffeefox:
谢谢2位, 如果用正则(结合URLRewriter.dll)不行,那我自己写HttpModule算了。

帖子暂保留几天
truecoffeefox 2011-08-12
  • 打赏
  • 举报
回复
直接用正则似乎不行
用这个重写组件可以实现,但是需要自定义扩展
http://urlrewriter.net/index.php/support/reference/transforms/custom-transform
huangwenquan123 2011-08-12
  • 打赏
  • 举报
回复

//代码写是比较好写,要直接用在那个组件上还真不知道怎么弄!
List<string> list = new List<string> { "Abc/123.html", "Abc/43.html", "Abc/989898.html", "Abc/abc454.html" };
foreach (string s in list)
{
string result = Regex.Replace(s, @"(?<=Abc/)([^\.]+)(?=\.html)", m =>
{
string str = m.Value.Length >= 4 ? m.Value.Substring(m.Value.Length - 4) : m.Value.PadLeft(4, '0');
return str + "/" + m.Value;
});
Console.WriteLine(result);
}
Console.ReadLine();
/*
Abc/0123/123.html
Abc/0043/43.html
Abc/9898/989898.html
Abc/c454/abc454.html
*/
net205 2011-08-12
  • 打赏
  • 举报
回复
不好意思 ,例子写错了,应该是这样的:
Abc/123.html -> Abc/0123/123.html
Abc/43.html -> Abc/0043/43.html
Abc/989898.html -> Abc/9898/989898.html
子夜__ 2011-08-11
  • 打赏
  • 举报
回复
你的头像太猛了
参考
LMAOhuaNL 2011-08-11
  • 打赏
  • 举报
回复
Abc\.aspx\?aid=(63) $0043.html

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧