【问题标题】:Querystring without argument name没有参数名称的查询字符串
【发布时间】:2012-09-30 06:23:49
【问题描述】:

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

现在,URL 看起来像这样:

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

我希望它看起来像:

http://mysite.website.com/1234

这样的事情可能吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        你有几个选择:

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

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2013-08-03
            • 2013-02-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-11-18
            相关资源
            最近更新 更多