DNN 友好 URL 模块无法正确重写 url
DNN friendly URL module is not able to rewrite the url correctly
在 DNN 8 中,我有 3(三)个不同的门户,它们都具有相同的 IA(页面和内容)。示例:portal1.site.com、portal2.site.com、portal3.site.com.
使用 SiteUrl.config,我想重写 URL,以便不存在的虚荣 URL 重定向到正确的页面。经过进一步调查,我意识到 siteurl.config 在相对基础上使用 URLs。它无法理解您来自哪个门户。
<RewriterRule>
<LookFor>[^?]*/plan/speakers/.*-(.*)</LookFor>
<SendTo>~/Default.aspx?TabId=180&SpeakerId=</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>[^?]*/plan/speakers/.*-(.*)</LookFor>
<SendTo>~/Default.aspx?TabId=144&SpeakerId=</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>[^?]*/plan/speakers/.*-(.*)</LookFor>
<SendTo>~/Default.aspx?TabId=264&SpeakerId=</SendTo>
</RewriterRule>
如果用户想要转到 portal1.site.com/plan/speakers/mike、portal2.site.com/plan/speakers/mike 或 portal3.site.com/plan/speakers/mike,他们全部重定向到 tabid 180(仅适用于第二个门户)。
我能够实施解决方法。
1. 您想在 web.config.
中使用 IIS 重写来屏蔽新的 url
<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>
这会将您的 url 重写为如下内容:portal1/plans、portal2/plans 等
然后,您想编辑 siteurl.config 以说明这些重写。
<RewriterRule>
<LookFor>[^?]*/portal1/plan/speakers/.*-(.*)</LookFor>
<SendTo>~/Default.aspx?TabId=180&SpeakerId=</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>[^?]*/portal2/plan/speakers/.*-(.*)</LookFor>
<SendTo>~/Default.aspx?TabId=144&SpeakerId=</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>[^?]*/portal3/plan/speakers/.*-(.*)</LookFor>
<SendTo>~/Default.aspx?TabId=264&SpeakerId=</SendTo>
</RewriterRule>
P.S。确保也将这些 url 添加到高级 url 设置中的 to-ignore 列表中。
我会通过将记录添加到每个页面的 TabURLS table 来完成此操作。如果你修改一个页面,使用页面设置,你可以修改页面的URL。试试看。查看该页面 table 中的记录。
select * from taburls where tabid = ##
然后把URL改回原来的URL
select * from taburls where tabid = ##
看看它是否在那里添加了一条新记录。如果是这样,则只需将 "row" 的格式复制到 table 中,以获取您需要创建的任何其他记录。
你也可以看看这个codeplex project
在 DNN 8 中,我有 3(三)个不同的门户,它们都具有相同的 IA(页面和内容)。示例:portal1.site.com、portal2.site.com、portal3.site.com.
使用 SiteUrl.config,我想重写 URL,以便不存在的虚荣 URL 重定向到正确的页面。经过进一步调查,我意识到 siteurl.config 在相对基础上使用 URLs。它无法理解您来自哪个门户。
<RewriterRule>
<LookFor>[^?]*/plan/speakers/.*-(.*)</LookFor>
<SendTo>~/Default.aspx?TabId=180&SpeakerId=</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>[^?]*/plan/speakers/.*-(.*)</LookFor>
<SendTo>~/Default.aspx?TabId=144&SpeakerId=</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>[^?]*/plan/speakers/.*-(.*)</LookFor>
<SendTo>~/Default.aspx?TabId=264&SpeakerId=</SendTo>
</RewriterRule>
如果用户想要转到 portal1.site.com/plan/speakers/mike、portal2.site.com/plan/speakers/mike 或 portal3.site.com/plan/speakers/mike,他们全部重定向到 tabid 180(仅适用于第二个门户)。
我能够实施解决方法。 1. 您想在 web.config.
中使用 IIS 重写来屏蔽新的 url<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>
这会将您的 url 重写为如下内容:portal1/plans、portal2/plans 等
然后,您想编辑 siteurl.config 以说明这些重写。
<RewriterRule>
<LookFor>[^?]*/portal1/plan/speakers/.*-(.*)</LookFor>
<SendTo>~/Default.aspx?TabId=180&SpeakerId=</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>[^?]*/portal2/plan/speakers/.*-(.*)</LookFor>
<SendTo>~/Default.aspx?TabId=144&SpeakerId=</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>[^?]*/portal3/plan/speakers/.*-(.*)</LookFor>
<SendTo>~/Default.aspx?TabId=264&SpeakerId=</SendTo>
</RewriterRule>
P.S。确保也将这些 url 添加到高级 url 设置中的 to-ignore 列表中。
我会通过将记录添加到每个页面的 TabURLS table 来完成此操作。如果你修改一个页面,使用页面设置,你可以修改页面的URL。试试看。查看该页面 table 中的记录。
select * from taburls where tabid = ##
然后把URL改回原来的URL
select * from taburls where tabid = ##
看看它是否在那里添加了一条新记录。如果是这样,则只需将 "row" 的格式复制到 table 中,以获取您需要创建的任何其他记录。
你也可以看看这个codeplex project