ASP.NET web application中的redirect

枕上从妨一夜睡,灯前读尽十年诗。这篇文章主要讲述ASP.NET web application中的redirect相关的知识,希望能为你提供帮助。
在开发ASP.NET MVC web application过程中,开发上线了新系统后,需要把老系统的url redirect新系统下
其中在项目系统目录下有一个文件  301RedirectsPages.config, 内容如下:

< rewriteMaps> < rewriteMap name="Redirects"> < add key="/contact-us.aspx" value="https://www.songbingjia.com/contact-us" /> < add key="/services-solutions" value="https://www.songbingjia.com/services-and-solutions" /> < add key="/sales-support" value="https://www.songbingjia.com/sales-and-support" /> < add key="/events-news" value="https://www.songbingjia.com/events-and-news" /> < add key="/services-solutions/services.aspx" value="https://www.songbingjia.com/services-and-solutions/services" /> < add key="/services-solutions/solutions.aspx" value="https://www.songbingjia.com/services-and-solutions/solutions" /> < /rewriteMap> < /rewriteMaps>



在web.config文件中,在system.webServer下面,有一个rewrite节点,显示如下:

< system.webServer> < rewritexdt:Transform="Replace"> < rewriteMaps configSource="301RedirectsPages.config" /> < rules> < rule name="Redirect to HTTPS" stopProcessing="true"> < match url="(.*)" /> < conditions> < add input="{HTTPS}" pattern="^OFF$" /> < /conditions> < action type="Redirect" url="https://{HTTP_HOST}/{R:1}" /> < /rule> < rule name="Remove trailing slash" stopProcessing="true"> < match url="(.*)/$" /> < conditions> < add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> < add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> < /conditions> < action type="Redirect" redirectType="Permanent" url="{R:1}" /> < /rule> < rule name="Redirects"> < match url=".*" /> < conditions> < add input="{Redirects:{REQUEST_URI}}" pattern="(.+)" /> < /conditions> < action type="Redirect" url="{C:1}" appendQueryString="true" /> < /rule> < /rules> < /rewrite> < /system.webServer>


这种情况下,在浏览器窗口输入URL:
localhost/contact-us.aspx 将自动redirect到 localhost/contact-us
localhost/services-solutions/services.aspx 自动redirect到 localhost/services-and-solutions/services
localhost/services-solutions/solutions.aspx 自动redirect到 localhost/services-and-solutions/solutions
但是,当你输入
localhost/services-solutions 不能自动redirect到 localhost/services-and-solutions
localhost/sales-support 不能自动redirect到 localhost/sales-and-support
localhost/events-news 不能自动redirect到 localhost/events-and-news
 
【ASP.NET web application中的redirect】查找了半天的原因,才发现是在web.config 中的设置
appendQueryString="true" 应该改成  appendQueryString="false"
也就是这一行   < action type="Redirect" url="{C:1}" appendQueryString="true" />
应该改成  < action type="Redirect" url="{C:1}" appendQueryString="false" />
改成后的web.config文件如下:
< rewritexdt:Transform="Replace"> < rewriteMaps configSource="301RedirectsPages.config" /> < rules> < rule name="Redirect to HTTPS" stopProcessing="true"> < match url="(.*)" /> < conditions> < add input="{HTTPS}" pattern="^OFF$" /> < /conditions> < action type="Redirect" url="https://{HTTP_HOST}/{R:1}" /> < /rule> < rule name="Remove trailing slash" stopProcessing="true"> < match url="(.*)/$" /> < conditions> < add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> < add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> < /conditions> < action type="Redirect" redirectType="Permanent" url="{R:1}" /> < /rule> < rule name="Redirects"> < match url=".*" /> < conditions> < add input="{Redirects:{REQUEST_URI}}" pattern="(.+)" /> < /conditions> < action type="Redirect" url="{C:1}" appendQueryString="false" /> < /rule> < /rules> < /rewrite>

 
 



 








    推荐阅读