简体   繁体   中英

Querystring without argument name

I am trying to get this to work. I have a DNN module in which I read from a querystring and perform a few steps. All of that is working fine. Now I am trying to clean up the URL while reading the querystring

Right now, the URL looks something like this:

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

I would like it to look like:

http://mysite.website.com/1234

Is something like this even possible?

You are much better to use a proper rewriting solution for DotNetNuke (eg iFinity UrlMaster and there are others...).

You can then write a custom url provider for your module.

That's what I've done on my site to rewrite parts of my articles module (eg www.ventrian.com/blog/

You can find more information about urlmaster here:

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

look at using a URL Rewriter module. There are several third party ones for IIS6, but Microsoft provides one for IIS7 and IIS7.5. You basically configure it with a regular expression and change the output.

Microsoft's rewrite module for IIS7 is available at: http://www.iis.net/downloads/microsoft/url-rewrite

You've got a couple of choices:

  1. Explore the rewrite capabilities available in DNN and how to use them. They can be found in Host Settings > Advanced Settings > Friendly URL Settings. Or use the 2nd option based on which version of IIS you're working on.

2a. URL Rewrite Module for IIS 7 & above

2b. "ISAPI_Rewrite 3" by HeliconTech (has free version too, that does the job pretty well)

You can accomplish what you are looking for without interacting with DNN at all by using an HttpModule. Kind of like this:

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;
    }
}

Then you can add this to your Web.config:

<modules runAllManagedModulesForAllRequests="true">
    <add name="PidRewriteModule" type="Assembly.Namespace.PidRewriteModule, Assembly"/>
</modules>

Put that in the system.webServer node. Substitute Assembly and Namespace respectively.

All of this info is for IIS7. It's not entirely different for IIS 6, but previous implementations you have to go the route of ISAPI filters.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM