Exitos
Exitos

Reputation: 29750

How to route ALL requests for domain to a sub folder asp.net

I have seen lots of solutions to this but none seem to work....

I have a domain

producerpte.co.uk

But I have a separate application set up in a sub folder so to see the root of that application you have to go to...

producerpte.co.uk/producerpte

However I want it so that the user does not see the 'site1' part of the url.

When I use url rewriting in Web.Server config or I use Context.RewritePath in code (in an application set up on the root) it simply redirects the user to the url (with site1 in it) I do not want the user to know they are going to a subfolder.

Am I setting this up wrong?

I'm actually using Winhost. All the examples ive tried just do not change result of the call without redirecting the url :-(

I have been told by winhost that I should do it with code/configuration. I would prefer to do it with code to be honest....

UPDATE : I tried Max's answer and I did...

 <rules>
    <rule name="Redirect if producerpte" stopProcessing="true">
        <match url="^ producerpte/(.*)$" />
        <action type="Redirect" url="{R:1}" />
    </rule>
    <rule name="Rewrite to sub folder">
        <match url="^.*$" />
        <action type="Rewrite" url="producerpte/{R:0}" />
    </rule>
  </rules>

But no luck :-( And the urls still change in the browser....

Upvotes: 0

Views: 3966

Answers (1)

MaxSC
MaxSC

Reputation: 4758

If WinHost did enable IIS Rewrite Module, edit your web.config file and give this rule a try:

<rewrite>
<rules>
    <rule name="Redirect if site1" stopProcessing="true">
        <match url="^site1/(.*)$" />
        <action type="Redirect" url="{R:1}" />
    </rule>
    <rule name="Rewrite to sub folder">
        <match url="^.*$" />
        <action type="Rewrite" url="site1/{R:0}" />
    </rule>
</rules>
</rewrite>

--- UPDATE ---

Well, I tested this IIS configuration:

enter image description here

I've added rules on the root site.
IIS created a web.config file:

enter image description here

Here's the content of the web.config file:

<configuration>
    <system.webServer>
        <rewrite>
             <rules>
                <rule name="Redirect if producerpte" stopProcessing="true">
                    <match url="^producerpte/(.*)$" />
                    <action type="Redirect" url="{R:1}" />
                </rule>
                <rule name="Rewrite to sub folder">
                    <match url="^.*$" />
                    <action type="Rewrite" url="producerpte/{R:0}" />
                </rule>
              </rules>
        </rewrite>
    </system.webServer>
</configuration>
  • http://localhost:8066/ displays the content of C:\inetpub\wwwroot\producerpte\producerpte without changing the URL in browser

  • http://localhost:8066/producerpte/ displays the content of C:\inetpub\wwwroot\producerpte\producerpte but the URL in browser is changed to http://localhost:8066/

Be sure that you created rules on the root site (and not the sub application) and I noticed that you had a leading space in your config: <match url="^ producerpte/(.*)$" /> between ^ and producerpte.

Upvotes: 4

Related Questions