IIS下同一域名承载两个站点的最优实现方案咨询
推荐方案:IIS URL重写+反向代理实现子域到主域子目录的映射
为什么不选其他方案
- 虚拟目录:两个站点用不同CMS,虚拟目录会继承主站点的应用池和配置,极易出现web.config节点冲突、权限隔离不足的问题,无法保证两个应用独立运行。
- 直接修改主域绑定/添加应用程序:本质是把career站点纳入主站点的运行上下文,同样会面临配置冲突、资源依赖冲突的问题,不符合两个站点独立部署的需求。
- 单纯重定向:只是将用户从子域跳转至主域,URL会发生变化,且子域站点内的绝对路径资源(比如图片、脚本)会出现加载异常,无法实现“通过主域子目录访问子域站点”的需求。
推荐方案:反向代理+URL重写
这个方案可以实现用户访问主域子目录时,实际请求转发到子域站点,同时自动替换响应中的子域链接为主域路径,完全满足你的需求,且保留两个站点的独立运行环境。
前置准备
- 安装IIS的URL重写模块和**Application Request Routing (ARR)**模块(可通过IIS管理器的“管理模块”或Web平台安装包获取)。
- 在IIS服务器节点下,打开“Application Request Routing Cache”,点击“服务器代理设置”,勾选“启用代理”并保存。
配置主站点(example.com)
在主站点的web.config中添加以下规则:
<configuration> <system.webServer> <rewrite> <!-- 反向代理规则:将/career/*路径转发到子域站点 --> <rules> <rule name="Proxy to Career Site" stopProcessing="true"> <match url="^career/(.*)" /> <action type="Rewrite" url="https://career.example.com/{R:1}" /> <!-- 处理编码问题,避免响应乱码 --> <serverVariables> <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" /> <set name="HTTP_ACCEPT_ENCODING" value="" /> </serverVariables> </rule> </rules> <!-- 输出规则:替换响应中的子域链接为主域/career路径 --> <outboundRules> <rule name="Rewrite Career Links" preCondition="IsHtmlResponse"> <match filterByTags="A, Img, Link, Script, Form" pattern="^https://career\.example\.com/(.*)" /> <action type="Rewrite" value="https://example.com/career/{R:1}" /> </rule> <preConditions> <preCondition name="IsHtmlResponse"> <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" /> </preCondition> </preConditions> </outboundRules> </rewrite> <!-- 启用反向代理配置 --> <proxy enabled="true" preserveHostHeader="false" reverseRewriteHostInResponseHeaders="true" /> </system.webServer> </configuration>
配置子域站点(career.example.com)
为了避免旧URL失效影响SEO,在子域站点的web.config中添加永久重定向规则:
<configuration> <system.webServer> <rewrite> <rules> <rule name="Redirect to Main Domain" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTP_HOST}" pattern="^career\.example\.com$" /> </conditions> <action type="Redirect" url="https://example.com/career/{R:1}" redirectType="Permanent" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
注意事项
- 确保两个站点的SSL证书配置正确,主站点转发请求到子域时使用HTTPS,避免证书信任问题。
- 测试所有子路径(比如
example.com/career/job1),确认页面加载正常、资源链接正确。 - 如果子域站点有特殊的HTTP头或会话需求,可能需要调整ARR的代理设置,确保请求头正确传递。
内容的提问来源于stack exchange,提问作者SECØND BANANA
相关产品推荐
相关产品推荐

