这可能更像是一个正则表达式问题,但它正在推动我们的发布。我无法想出一个聪明的解决方案。
基本上,我们想将www.oursite.com/Games.aspx?g=classic&m=etc重写为www.oursite.com/classic/?m=etc
问题是规则本身(至少由IIS7的URL Rewrite mod生成)如下所示:
<rewrite>
<rules>
<rule name="RedirectUserFriendlyURL1" stopProcessing="true">
<match url="^Games\.aspx$" />
<conditions>
<add input="{REQUEST_METHOD}" negate="true" pattern="^POST$" />
<add input="{QUERY_STRING}" pattern="^g=([^=&]+)$" />
</conditions>
<action type="Redirect" url="{C:1}" appendQueryString="false" redirectType="Permanent" />
</rule>
<rule name="RewriteUserFriendlyURL2" stopProcessing="true">
<match url="([^/]+)/?$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="Games.aspx?g={R:1}" />
</rule>
</rules>
</rewrite>
因此,正在重写与类似模式匹配的任何其他文件,例如Item /?id = 23。另外,我们的脚本资源文件正在被重写,因此整个网站会抛出30个javascript错误。根据我们的规格,我们的规格中不可接受的是www.oursite.com/Games/classic或www.oursite.com/g/classic。有解决方案吗Manythanks!
答案 0 :(得分:2)
也许不是在第二个规则中匹配([^/]+)/?$
,而是在正则表达式OR语句中明确说明要重写哪些内容:
(classic|somethingelse|athirdsomething)/?$
这样只会修改您明确要重写的项目。我不知道有多少这些你可能需要重写,所以如果它是一个很大的数字,这可能是不可行的,但如果它只是几个类别,那么它可能是最直接的。
或者,如果只有某些前缀不应该被重写,你可以简单地添加模式匹配那些前缀的否定条件到你的重写。