1

我正在努力让它发挥作用。我有一个 DNN 模块,我从查询字符串中读取并执行几个步骤。所有这些工作正常。现在我正在尝试在读取查询字符串时清理 URL

现在,URL 看起来像这样:

http://mysite.website.com/?pid=1234

我希望它看起来像:

http://mysite.website.com/1234

这样的事情甚至可能吗?

4

4 回答 4

1

您最好为 DotNetNuke 使用适当的重写解决方案(例如 iFinity UrlMaster 和其他......)。

然后,您可以为您的模块编写自定义 url 提供程序。

这就是我在我的网站上重写我的文章模块的部分内容(例如 www.ventrian.com/blog/

您可以在此处找到有关 urlmaster 的更多信息:

http://www.ifinity.com.au/Products/Url_Master_DNN_SEO_Urls

于 2012-09-30T10:10:52.713 回答
0

通过使用 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 过滤器的路线。

于 2012-09-30T08:41:56.380 回答
0

你有几个选择:

  1. 探索 DNN 中可用的重写功能以及如何使用它们。它们可以在主机设置 > 高级设置 > 友好 URL 设置中找到。或者根据您正在使用的 IIS 版本使用第二个选项。

2a。IIS 7 及更高版本的 URL 重写模块

2b。HeliconTech 的“ISAPI_Rewrite 3”(也有免费版本,做得很好)

于 2012-09-30T06:43:57.513 回答
0

看看使用 URL Rewriter 模块。IIS6 有几个第三方的,但微软为 IIS7 和 IIS7.5 提供了一个。您基本上使用正则表达式对其进行配置并更改输出。

Microsoft 的 IIS7 重写模块位于:http ://www.iis.net/downloads/microsoft/url-rewrite

于 2012-09-30T06:25:30.247 回答