IIS 8.5+部署应用后出现虚拟目录名称重复问题
/WebClient Paths in IIS HTTP Redirect Got it, this is a super common issue when using IIS's HTTP Redirect module—if your rules aren't configured to handle relative paths or duplicate segments correctly, you'll end up with wonky URLs like www.abc.com/WebClient/WebClient/dashboard/home (or even more repeats) that break your app. Let's walk through the fixes, from quick rule tweaks to better long-term practices:
1. Fix Your HTTP Redirect Rule First
The most likely culprit is a relative path in your redirect setting that's causing the path to stack. Here's how to fix it:
Using IIS Manager:
- Open IIS Manager, navigate to your Default Website or target application.
- Double-click the HTTP Redirect module.
- Instead of using a relative path like
/WebClient/dashboard/home, switch to an absolute URL (e.g.,https://www.abc.com/WebClient/dashboard/home). This eliminates any chance of path stacking since it points directly to the exact destination. - If you must use a relative path, make sure to check the Exact destination box and set the rule to match exactly, not by prefix.
Using web.config (URL Rewrite Module):
If you have the URL Rewrite module installed (way more flexible than the native HTTP Redirect), add a rule that explicitly strips duplicate/WebClientsegments. Drop this into your web.config under<system.webServer>:<rewrite> <rules> <rule name="Strip Duplicate WebClient Segments" stopProcessing="true"> <match url="^(WebClient/)+(.*)$" /> <action type="Redirect" url="WebClient/{R:2}" redirectType="Permanent" /> </rule> </rules> </rewrite>This regex matches any URL starting with one or more
WebClient/instances, then redirects to a URL with only oneWebClient/followed by the rest of the path.
2. Check Your App's Internal Link Generation
Sometimes the problem isn't IIS—it's how your app builds links. If your frontend or backend uses page-relative paths (e.g., WebClient/dashboard/home instead of /WebClient/dashboard/home), each redirect can add another WebClient segment.
- For frontend code: Ensure all internal links start with
/to use root-relative paths (so they always reference the base of your domain). - For backend frameworks (like ASP.NET): Use built-in helpers like
Url.Content()or@Url.Action()to generate root-relative paths automatically, instead of hardcoding relative links.
3. Upgrade to URL Rewrite for Better Control
The native HTTP Redirect module is pretty basic. The URL Rewrite module lets you create more precise rules, like targeting only URLs with duplicate segments (instead of blanket redirects). Here's a tighter rule that specifically catches two or more WebClient repeats:
<rewrite> <rules> <rule name="Fix Explicit Duplicate WebClient Paths" stopProcessing="true"> <match url="^WebClient/(WebClient/)+(.*)$" /> <action type="Redirect" url="WebClient/{R:2}" redirectType="Permanent" /> </rule> </rules> </rewrite>
This will fix URLs with 2, 3, or more repeated WebClient segments in one go.
4. Test Thoroughly
After setting up your rules, test all scenarios to make sure you didn't break anything:
- Visit the correct URL (
www.abc.com/WebClient/dashboard/home) to confirm it doesn't get redirected incorrectly. - Visit a double-duplicate URL (
www.abc.com/WebClient/WebClient/dashboard/home) to verify it jumps to the correct path. - Try a triple-duplicate URL just to be safe—your rule should handle it seamlessly.
内容的提问来源于stack exchange,提问作者Naresh

