我们有一个IIS 8.5设置,其中一个网站绑定到domain.com,并包含许多以domain.com/app1,domain.com/app2等方式访问的IIS应用程序。
这些应用程序中的每一个都指向相同的物理路径,因此它们共享web.config。这是一种特定的CMS配置。
我已经将常用的URL重写规则(重定向到HTTPS,强制执行小写,添加尾部斜杠等)应用到每个应用程序共享的web.config,但已经意识到这些规则仅应用于应用程序名称后面的URL。我的规则只是使用URL Rewrite GUI添加的标准规则:
2016-09-20 10:35:54,325 DEBUG [DiscoveryClient-HeartbeatExecutor-0] (AbstractJerseyEurekaHttpClient.java:60) - Jersey HTTP POST http://localhost:9999/eureka/v2//apps/MY-APP with instance 7010; statusCode=400
2016-09-20 10:35:54,326 DEBUG [DiscoveryClient-HeartbeatExecutor-0] (ThreadSafeClientConnManager.java:282) - Released connection is not reusable.
2016-09-20 10:35:54,326 DEBUG [DiscoveryClient-HeartbeatExecutor-0] (ConnPoolByRoute.java:429) - Releasing connection [{}->http://localhost:9999][null]
2016-09-20 10:35:54,326 DEBUG [DiscoveryClient-HeartbeatExecutor-0] (ConnPoolByRoute.java:676) - Notifying no-one, there are no waiting threads
2016-09-20 10:35:54,326 DEBUG [DiscoveryClient-HeartbeatExecutor-0] (RedirectingEurekaHttpClient.java:121) - Pinning to endpoint null
2016-09-20 10:35:54,326 WARN [DiscoveryClient-HeartbeatExecutor-0] (RetryableEurekaHttpClient.java:127) - Request execution failure with status code 400; retrying on another server if available
因此,例如,<rewrite>
<rules>
<rule name="Enforce lowercase" stopProcessing="true">
<match url="[A-Z]" ignoreCase="false" />
<action type="Redirect" url="{ToLower:{URL}}" redirectType="Permanent" />
</rule>
<rule name="Add trailing slash" stopProcessing="true">
<match url="(.*[^/])$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="{R:1}/" redirectType="Permanent" />
</rule>
<rule name="Redirect to HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
重定向到http://domain.com/APP1/PATH
。此外,https://domain.com/APP1/path/
不会重定向到https://domain.com/app1
。
HTTPS规则很好,但任何人都可以告诉我如何配置其他2个规则以便它们与整个URL一起使用,同时要记住特定的应用程序名称(app1,app2等)需要一般地处理
更新
我发现我可以使用IIS中的全局规则(在服务器级别)强制执行小写URL,这足以满足我的需求。但似乎不可能复制网站级规则来添加/删除尾部斜杠。
答案 0 :(得分:0)
您只需更改操作网址即可。
<rule name="Add trailing slash" stopProcessing="true">
<match url="(.*[^/])$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}/" redirectType="Permanent" />
</rule>