使用web.config重写产品页面URL的最优方案咨询
解决IIS URL重写:将带多参数的动态URL简化为仅含名称的友好URL
看起来你现在已经配置了部分规则,但生成的URL包含了id和color参数的层级,而你想要的是直接简化为仅显示产品名称的友好URL。我们需要调整web.config里的URL重写规则,分两步实现:将旧URL重定向到新的友好URL,以及将友好URL内部映射回实际的产品页面。
第一步:添加重定向规则(把旧URL转到友好URL)
这条规则会把用户访问的product.asp?id=01&color=05&name=xxxx自动跳转到/xxxx,同时更新浏览器地址栏:
<rule name="Redirect to Simplified Product URL" stopProcessing="true"> <match url="^product\.asp$" /> <conditions> <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" /> <!-- 跳过POST请求,避免影响表单提交 --> <add input="{QUERY_STRING}" pattern="id=[^&]+&color=[^&]+&name=([^&]+)" /> <!-- 匹配包含id、color、name的查询参数 --> </conditions> <action type="Redirect" url="{C:1}" appendQueryString="false" redirectType="Permanent" /> </rule>
第二步:添加重写规则(把友好URL映射回实际页面)
这条规则会在后台把用户访问的/xxxx映射到实际的product.asp页面,用户看不到真实的URL:
<rule name="Rewrite Simplified URL to Product Page" stopProcessing="true"> <match url="^([^/]+)$" /> <!-- 匹配根目录下的单个路径段(也就是你的产品名称xxxx) --> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <!-- 排除实际存在的文件 --> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> <!-- 排除实际存在的目录 --> </conditions> <action type="Rewrite" url="product.asp?name={R:1}" /> </rule>
关键注意事项
- 如果你的
product.asp页面必须依赖id和color参数才能正常显示内容,那你需要在页面代码里通过name参数去查询对应的id和color(比如从数据库中匹配),否则页面会因为缺少参数而出错。 - 确保产品名称
name的值不包含斜杠、问号等特殊字符,否则正则表达式的匹配会失效。 - 使用
redirectType="Permanent"(301重定向)是为了SEO友好,告诉搜索引擎旧URL已经永久迁移到新的友好URL。
内容的提问来源于stack exchange,提问作者Preston
相关产品推荐
相关产品推荐

