我正在努力让它发挥作用。我有一个 DNN 模块,我从查询字符串中读取并执行几个步骤。所有这些工作正常。现在我正在尝试在读取查询字符串时清理 URL
现在,URL 看起来像这样:
http://mysite.website.com/?pid=1234
我希望它看起来像:
http://mysite.website.com/1234
这样的事情甚至可能吗?
我正在努力让它发挥作用。我有一个 DNN 模块,我从查询字符串中读取并执行几个步骤。所有这些工作正常。现在我正在尝试在读取查询字符串时清理 URL
现在,URL 看起来像这样:
http://mysite.website.com/?pid=1234
我希望它看起来像:
http://mysite.website.com/1234
这样的事情甚至可能吗?
您最好为 DotNetNuke 使用适当的重写解决方案(例如 iFinity UrlMaster 和其他......)。
然后,您可以为您的模块编写自定义 url 提供程序。
这就是我在我的网站上重写我的文章模块的部分内容(例如 www.ventrian.com/blog/
您可以在此处找到有关 urlmaster 的更多信息:
通过使用 HttpModule,您可以在完全不与 DNN 交互的情况下完成您正在寻找的事情。有点像这样:
public class PidRewriteModule : System.Web.IHttpModule
{
public void Dispose()
{
}
public void Init(System.Web.HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
if (app != null)
{
Match mPidCheck = new Regex(@"^/(?<pid>[0-9]+)/?$").Match(app.Context.Request.Url.AbsolutePath);
if (mPidCheck.Success)
{
app.Context.RewritePath("~/default.aspx", String.Empty, String.Concat("pid=", mPidCheck.Groups["pid"].Value));
}
}
else
return;
}
}
然后你可以把它添加到你的 Web.config 中:
<modules runAllManagedModulesForAllRequests="true">
<add name="PidRewriteModule" type="Assembly.Namespace.PidRewriteModule, Assembly"/>
</modules>
把它放在 system.webServer 节点中。分别替换 Assembly 和 Namespace。
所有这些信息都适用于 IIS7。IIS 6 并没有完全不同,但以前的实现必须走 ISAPI 过滤器的路线。
你有几个选择:
2a。IIS 7 及更高版本的 URL 重写模块
2b。HeliconTech 的“ISAPI_Rewrite 3”(也有免费版本,做得很好)
看看使用 URL Rewriter 模块。IIS6 有几个第三方的,但微软为 IIS7 和 IIS7.5 提供了一个。您基本上使用正则表达式对其进行配置并更改输出。
Microsoft 的 IIS7 重写模块位于:http ://www.iis.net/downloads/microsoft/url-rewrite