web.config配置URL重写规则仅根目录生效子文件夹不生效如何解决
web.config URL重写规则跨子目录生效配置方案
问题根因
原有配置存在两个核心问题:
<match>节点的匹配规则仅适配根路径下的请求,子目录路径(例如/en-US/page-xxx)的URL前缀带语言标识,无法被^page-这类开头的规则匹配- 3-8号规则逻辑冲突:多个规则同时匹配
page-/product-前缀,且设置了stopProcessing="true",排在最前面的en-US规则匹配后直接终止流程,fr-FR、ar-AR的规则永远不会生效
调整后完整配置
仅需将该配置放在根目录的web.config中即可,无需在子文件夹单独放置配置:
<rewrite> <rules> <!-- 根目录原有规则 保留 --> <rule name="rule 1q" stopProcessing="true"> <match url="^sayfa-([0-9a-zA-Z-_]+)" /> <action type="Rewrite" url="/menu-detay.php?sef={R:1}" appendQueryString="true" /> </rule> <rule name="rule 2q" stopProcessing="true"> <match url="^urun-([0-9a-zA-Z-_]+)" /> <action type="Rewrite" url="/urun.php?sef={R:1}" appendQueryString="true" /> </rule> <!-- 合并后的多语言子目录规则 --> <rule name="Multilingual Page Rule" stopProcessing="true"> <match url="^([a-z]{2}-[A-Z]{2})/page-([0-9a-zA-Z-_]+)" /> <conditions> <add input="{REQUEST_URI}" pattern="^/(en-US|fr-FR|ar-AR)/" ignoreCase="true" /> </conditions> <action type="Rewrite" url="/{C:1}/menu-detay.php?sef={R:2}" appendQueryString="true" /> </rule> <rule name="Multilingual Product Rule" stopProcessing="true"> <match url="^([a-z]{2}-[A-Z]{2})/product-([0-9a-zA-Z-_]+)" /> <conditions> <add input="{REQUEST_URI}" pattern="^/(en-US|fr-FR|ar-AR)/" ignoreCase="true" /> </conditions> <action type="Rewrite" url="/{C:1}/urun.php?sef={R:2}" appendQueryString="true" /> </rule> </rules> </rewrite>
配置说明
- 匹配规则新增了语言前缀的捕获逻辑,可自动识别
en-US/fr-FR/ar-AR三类子目录请求 - 条件节点限制仅匹配指定的三个语言前缀,避免误匹配其他路径
{C:1}取条件中匹配到的语言标识,{R:2}取匹配到的sef参数,自动适配对应语言目录下的处理文件- 所有规则统一放在根目录配置,同时支持根路径和子目录的重写需求
内容的提问来源于stack exchange,提问作者Metehan Gezer
相关产品推荐
相关产品推荐

