Search code examples
dotnetnuke

DNN friendly URL module is not able to rewrite the url correctly


In DNN 8, I have 3 (three) different portals, all with the same IA (pages & content). Example: portal1.site.com, portal2.site.com, portal3.site.com.

Using SiteUrl.config, I want to re-write the URL so that a vanity URL that doesn't exist redirects to the correct page. After further investigation, I realized that siteurl.config uses URLs in relative basis. It's not able to comprehend what portal you're coming from.

<RewriterRule>
    <LookFor>[^?]*/plan/speakers/.*-(.*)</LookFor>
    <SendTo>~/Default.aspx?TabId=180&amp;SpeakerId=$1</SendTo>
</RewriterRule>
<RewriterRule>
    <LookFor>[^?]*/plan/speakers/.*-(.*)</LookFor>
    <SendTo>~/Default.aspx?TabId=144&amp;SpeakerId=$1</SendTo>
</RewriterRule>
<RewriterRule>
    <LookFor>[^?]*/plan/speakers/.*-(.*)</LookFor>
    <SendTo>~/Default.aspx?TabId=264&amp;SpeakerId=$1</SendTo>
</RewriterRule>

If a user wants to go to portal1.site.com/plan/speakers/mike, portal2.site.com/plan/speakers/mike, or portal3.site.com/plan/speakers/mike, they all redirect to tabid 180 (which works only for the second portal).


Solution

  • I was able to implement a workaround. 1. you want to mask a new url using IIS rewrite in the web.config.

    <rule name="Redirect to plan" enabled="true" stopProcessing="true">
              <match url="^plan/speakers/([_0-9a-z-]+)-([0-9]+)" />
              <conditions logicalGrouping="MatchAll" trackAllCaptures="true">
                  <add input="{HTTP_HOST}" pattern="^(.*).domain.*" />
              </conditions>
              <action type="Rewrite" url="/{C:1}/{R:0}" />
            </rule>
    

    This will re-write your url to something like this: portal1/plans, portal2/plans, etc.

    Then, you want to edit your siteurl.config to account for these re-writes.

    <RewriterRule>
          <LookFor>[^?]*/portal1/plan/speakers/.*-(.*)</LookFor>
          <SendTo>~/Default.aspx?TabId=180&amp;SpeakerId=$1</SendTo>
        </RewriterRule>
        <RewriterRule>
          <LookFor>[^?]*/portal2/plan/speakers/.*-(.*)</LookFor>
          <SendTo>~/Default.aspx?TabId=144&amp;SpeakerId=$1</SendTo>
        </RewriterRule>
        <RewriterRule>
          <LookFor>[^?]*/portal3/plan/speakers/.*-(.*)</LookFor>
          <SendTo>~/Default.aspx?TabId=264&amp;SpeakerId=$1</SendTo>
        </RewriterRule>
    

    P.S. Make sure too add these urls to the list of to-ignore in your advanced url settings.