Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I redirect and modify extension-less URLs via ASP.NET?

We have redesigned the structure to a website which has several business units. Now I want to redirect (301) to the new page.

IE:
was www.example.com/abc
now www.example.com/default.aspx?article=abc

I have tried to use Global.asax to do this, and it works properly when I debug through it.

        if (Request.RawUrl.Contains("abc"))
        {
            Response.RedirectLocation = "/default.aspx?article=abc";
            Response.StatusCode = 301;
            Response.StatusDescription = "Moved";
            Response.End();
        }

So http://localhost:1234/example/abc redirects properly, but (where 1234 is the port for the debugging server)
http://localhost/example/abc does not redirect, it gives me a 404.

Any ideas?


Additional info: If I go to http://localhost/example/abc/default.aspx then it redirects properly.

like image 277
Nathan Koop Avatar asked Jan 24 '23 02:01

Nathan Koop


2 Answers

Well, if the port indicates you are using the built-in web server (the one that comes with VS), this probably works because that always routes requests through the ASP.NET framework.

Requests ending with /abc will not automatically route through the ASP.NET framework because IIS may not "know" you want them to. You need to check your IIS settings to make sure such requests are routed to the aspnet_isapi.dll


EDIT: To accomplish this, you need to add a wildcard mapping:

  1. In IIS Manager, expand the local computer, expand the Web Sites folder, right-click the Web site or virtual directory that you want, and then click Properties.
  2. Click the appropriate tab: Home Directory, Virtual Directory, or Directory.
  3. In the Application settings area, click Configuration, and then click the Mappings tab.
  4. To install a wildcard application map, do the following:
    • On the Mappings tab, click Add or Insert.
    • Type the path to the DLL in the Executable text box or click Browse to navigate to it (for example, the ASP.NET 2.0 dll is at c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll on my machine)
    • For extension, use ".*" without quotes, of course
    • Select which verbs you want to look for (GET,HEAD,POST,DEBUG are the usual for ASP.NET, you decide)
    • Make sure "Script engine" or "Application engine" is selected
    • Uncheck "Check that file exists"
    • Click okay.

I may be off on this, but if I am, hopefully someone will correct me. :)

like image 118
Jason Bunting Avatar answered Jan 29 '23 22:01

Jason Bunting


You should use the IIS wild card redirection, you will need something like this;

 *; www.example.com/*; www.example.com/default.aspx?article=$0

There is a reasonable reference at Microsoft

If you're using Apache I think you'll need to modify the htaccess file.

like image 36
Dave Anderson Avatar answered Jan 29 '23 20:01

Dave Anderson