/* UrlRewritingNet.UrlRewrite
* Version 2.0
*
* This Library is Copyright 2006 by Albert Weinert and Thomas Bandt.
*
* http://der-albert.com, http://blog.thomasbandt.de
*
* This Library is provided as is. No warrenty is expressed or implied.
*
* You can use these Library in free and commercial projects without a fee.
*
* No charge should be made for providing these Library to a third party.
*
* It is allowed to modify the source to fit your special needs. If you
* made improvements you should make it public available by sending us
* your modifications or publish it on your site. If you publish it on
* your own site you have to notify us. This is not a commitment that we
* include your modifications.
*
* This Copyright notice must be included in the modified source code.
*
* You are not allowed to build a commercial rewrite engine based on
* this code.
*
* Based on http://weblogs.asp.net/fmarguerie/archive/2004/11/18/265719.aspx
*
* For further informations see: http://www.urlrewriting.net/
*/
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using UrlRewritingNet.Configuration;
namespace UrlRewritingNet.Web{
public class RegExRewriteRule : RewriteRule
{
private Regex regex;
public override void Initialize(RewriteSettings rewriteSettings)
{
base.Initialize(rewriteSettings);
this.RegexOptions = rewriteSettings.GetEnumAttribute<RegexOptions>("regexOptions", RegexOptions.None);
this.VirtualUrl = rewriteSettings.GetAttribute("virtualUrl", "");
this.destinationUrl = rewriteSettings.GetAttribute("destinationUrl", "");
}
private void CreateRegEx()
{
UrlHelper urlHelper = new UrlHelper();
if (IgnoreCase)
{
this.regex = new Regex(urlHelper.HandleRootOperator(virtualUrl), RegexOptions.IgnoreCase | RegexOptions.Compiled | regexOptions);
}
else
{
this.regex = new Regex(urlHelper.HandleRootOperator(virtualUrl), RegexOptions.Compiled | regexOptions);
}
}
private string virtualUrl = string.Empty;
public string VirtualUrl
{
get { return virtualUrl; }
set
{
virtualUrl = value;
CreateRegEx();
}
}
private string destinationUrl = string.Empty;
public string DestinationUrl
{
get { return destinationUrl; }
set { destinationUrl = value; }
}
private RegexOptions regexOptions = RegexOptions.None;
public RegexOptions RegexOptions
{
get { return regexOptions; }
set
{
regexOptions = value;
CreateRegEx();
}
}
public override bool IsRewrite(string requestUrl)
{
return this.regex.IsMatch(requestUrl);
}
public override string RewriteUrl(string url)
{
return this.regex.Replace(url, this.destinationUrl, 1);
}
}
}
|