IIS-URL 重写,URL 规则为小写,querystring 除外
IIS-URL Rewrite, URL rule to lowercase except querystring
您好,我在 IIS 中使用 URL 重写模块。
我会创建一个规则来转换小写 url。但是,我遇到了问题。
我的目标是执行以下操作:
http://www.doMain.com/App/ActIon?X=1&y=3&JJ=3... => http://www.domain.com/app/action?X=1&y=3&JJ=3...
我第一次失败的尝试是:
<rule name="LowerCaseRule1" stopProcessing="true">
<match url="[A-Z]" ignoreCase="false" />
<action type="Redirect" url="{ToLower:{URL}}" />
</rule>
结果:
http://www.doMain.com/App/ActIon?X=1&y=3&JJ=3... => http://www.domain.com/App/ActIon?X=1&y=3&JJ=3...
它只适用于域(因为URL变量只有域)
我第二次失败的尝试是:
<rule name="Convert to lower case" stopProcessing="true">
<match url=".*[A-Z].*" ignoreCase="false" />
<action type="Redirect" url="{ToLower:{R:0}}" redirectType="Permanent" />
</rule>
结果:
http://www.doMain.com/App/ActIon?X=1&y=3&JJ=3... => http://www.domain.com/app/action?x=1&y=3&jj=3...
这也适用于查询字符串。所以没有服侍我。
我第三次失败的尝试是:
<rule name="Convert to lower case" stopProcessing="true">
<match url="^(.*[A-Z].*)(\/.*)" ignoreCase="false" />
<action type="Redirect" url="{ToLower:{R:1}}{R:2}" redirectType="Permanent" />
</rule>
结果:
http://www.doMain.com/App/ActIon?X=1&y=3&JJ=3... => http://www.domain.com/app/ActIon?X=1&y=3&JJ=3...
这个问题不适用于最后一条路径。
这导致不满足我需要的以下规则:
http://www.doMain.com/App => http://www.domain.com/app
问题:
是否有任何规则允许我做我需要做的事?
模块的处理是否正确?
因为我还有另一种选择是使用ASP.NET路由引擎(例如https://github.com/schourode/canonicalize)
只需要一点点修改:断开 ?
上的 URL 以将文件名部分与查询字符串分开。
<rule name="Convert to lower case" stopProcessing="true">
<match url="^([^?]*[A-Z][^?]*)(\?.*)?" ignoreCase="false" />
<action type="Redirect" url="{ToLower:{R:1}}{R:2}" redirectType="Permanent" />
</rule>
如果您使用散列 (#
),您可能也应该打破它们,因为您不想强制它们都小写。
<rule name="Convert to lower case" stopProcessing="true">
<match url="^([^?#]*[A-Z][^?#]*)(\?.*)?(#.*)?" ignoreCase="false" />
<action type="Redirect" url="{ToLower:{R:1}}{R:2}{R:3}" redirectType="Permanent" />
</rule>
不需要复杂的正则表达式
<rule name="Convert to lower case" stopProcessing="true">
<match url=".*[A-Z].*" ignoreCase="false" />
<action type="Redirect"
url="http://{ToLower:{HTTP_HOST}{PATH_INFO}}"
redirectType="Permanent" />
</rule>
Querystring 不包含在匹配中,默认情况下附加到重定向 URL。
您好,我在 IIS 中使用 URL 重写模块。 我会创建一个规则来转换小写 url。但是,我遇到了问题。 我的目标是执行以下操作:
http://www.doMain.com/App/ActIon?X=1&y=3&JJ=3... => http://www.domain.com/app/action?X=1&y=3&JJ=3...
我第一次失败的尝试是:
<rule name="LowerCaseRule1" stopProcessing="true">
<match url="[A-Z]" ignoreCase="false" />
<action type="Redirect" url="{ToLower:{URL}}" />
</rule>
结果:
http://www.doMain.com/App/ActIon?X=1&y=3&JJ=3... => http://www.domain.com/App/ActIon?X=1&y=3&JJ=3...
它只适用于域(因为URL变量只有域)
我第二次失败的尝试是:
<rule name="Convert to lower case" stopProcessing="true">
<match url=".*[A-Z].*" ignoreCase="false" />
<action type="Redirect" url="{ToLower:{R:0}}" redirectType="Permanent" />
</rule>
结果:
http://www.doMain.com/App/ActIon?X=1&y=3&JJ=3... => http://www.domain.com/app/action?x=1&y=3&jj=3...
这也适用于查询字符串。所以没有服侍我。
我第三次失败的尝试是:
<rule name="Convert to lower case" stopProcessing="true">
<match url="^(.*[A-Z].*)(\/.*)" ignoreCase="false" />
<action type="Redirect" url="{ToLower:{R:1}}{R:2}" redirectType="Permanent" />
</rule>
结果:
http://www.doMain.com/App/ActIon?X=1&y=3&JJ=3... => http://www.domain.com/app/ActIon?X=1&y=3&JJ=3...
这个问题不适用于最后一条路径。
这导致不满足我需要的以下规则:
http://www.doMain.com/App => http://www.domain.com/app
问题:
是否有任何规则允许我做我需要做的事?
模块的处理是否正确?
因为我还有另一种选择是使用ASP.NET路由引擎(例如https://github.com/schourode/canonicalize)
只需要一点点修改:断开 ?
上的 URL 以将文件名部分与查询字符串分开。
<rule name="Convert to lower case" stopProcessing="true">
<match url="^([^?]*[A-Z][^?]*)(\?.*)?" ignoreCase="false" />
<action type="Redirect" url="{ToLower:{R:1}}{R:2}" redirectType="Permanent" />
</rule>
如果您使用散列 (#
),您可能也应该打破它们,因为您不想强制它们都小写。
<rule name="Convert to lower case" stopProcessing="true">
<match url="^([^?#]*[A-Z][^?#]*)(\?.*)?(#.*)?" ignoreCase="false" />
<action type="Redirect" url="{ToLower:{R:1}}{R:2}{R:3}" redirectType="Permanent" />
</rule>
不需要复杂的正则表达式
<rule name="Convert to lower case" stopProcessing="true">
<match url=".*[A-Z].*" ignoreCase="false" />
<action type="Redirect"
url="http://{ToLower:{HTTP_HOST}{PATH_INFO}}"
redirectType="Permanent" />
</rule>
Querystring 不包含在匹配中,默认情况下附加到重定向 URL。