没有参数名称的查询字符串

时间:2012-09-30 06:23:50

标签: c# asp.net query-string dotnetnuke dotnetnuke-module

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

现在,URL看起来像这样:

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

我希望它看起来像:

http://mysite.website.com/1234

这样的事情是否可能?

5 个答案:

答案 0 :(得分:1)

最好为DotNetNuke使用正确的重写解决方案(例如iFinity UrlMaster以及其他人......)。

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

这就是我在我的网站上为重写部分文章模块所做的事情(例如www.ventrian.com/blog/

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

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

答案 1 :(得分:0)

查看使用URL重写器模块。 IIS6有几个第三方,但Microsoft为IIS7和IIS7.5提供了一个。您基本上使用正则表达式配置它并更改输出。

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

答案 2 :(得分:0)

答案 3 :(得分:0)

你有几个选择:

  1. 探索DNN中可用的重写功能以及如何使用它们。它们可以在主机设置>中找到。高级设置>友情网址设置。或者根据您正在使用的IIS版本使用第二个选项。
  2. 2a上。 IIS 7的URL重写模块&上述

    2B。 HeliconTech的“ISAPI_Rewrite 3”(也有免费版本,可以很好地完成工作)

答案 4 :(得分: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节点中。分别替换汇编和命名空间。

所有这些信息都适用于IIS7。它与IIS 6并没有完全不同,但是之前的实现必须采用ISAPI过滤器的路径。