web.config URL Rewrite排除特定页面解决移动端重定向过多问题
解决移动端URL重写与Response.Redirect导致的循环重定向问题
你的问题核心在于:移动端访问新URL时,先被重写规则导向default.asp,随后ASP代码检测到移动端发起Response.Redirect跳转到default_mobile.asp,但跳转过程反复触发形成循环。以下是两种可行的解决方案:
方案一:添加条件排除移动端页面的重写触发
在现有重写规则中添加条件,确保当请求目标是default_mobile.asp时,不执行重写逻辑,避免意外触发规则:
<rewrite> <rules> <rule name="SpecificRewrite" stopProcessing="true"> <match url="^test/([^/]+)/([^/]+)/?$" /> <conditions> <!-- 排除对default_mobile.asp的请求触发重写 --> <add input="{REQUEST_URI}" pattern="^/default_mobile\.asp$" negate="true" /> </conditions> <action type="Rewrite" url="default.asp?page=test&id={R:1}&name={R:2}" /> </rule> </rules> </rewrite>
方案二:移动端直接跳转至专属页面(推荐)
绕过ASP的移动端检测逻辑,直接通过重写规则识别移动端User-Agent,将新URL请求跳转到default_mobile.asp,减少一次HTTP跳转,从根源上避免循环:
<rewrite> <rules> <!-- 优先处理移动端请求,直接跳转至移动端页面 --> <rule name="MobileTestRedirect" stopProcessing="true"> <match url="^test/([^/]+)/([^/]+)/?$" /> <conditions> <!-- 匹配常见移动端User-Agent --> <add input="{HTTP_USER_AGENT}" pattern="(android|iphone|ipad|ipod|blackberry|windows phone|mobile)" ignoreCase="true" /> </conditions> <action type="Redirect" url="default_mobile.asp?page=test&id={R:1}&name={R:2}" redirectType="Temporary" /> </rule> <!-- 桌面端请求继续重写至原页面 --> <rule name="SpecificRewrite" stopProcessing="true"> <match url="^test/([^/]+)/([^/]+)/?$" /> <action type="Rewrite" url="default.asp?page=test&id={R:1}&name={R:2}" /> </rule> </rules> </rewrite>
方案说明
- 方案一适合不希望改动原有ASP移动端检测逻辑的场景,通过条件过滤避免规则误触发。
- 方案二更高效,直接在服务器层面完成移动端路由,消除两次跳转带来的循环风险。
内容的提问来源于stack exchange,提问作者Nick Cook
相关产品推荐
相关产品推荐

