匹配不以.html结尾的字符串

时间:2014-12-11 16:32:49

标签: regex iis regex-lookarounds url-rewrite-module

我想在我们的网站用户遇到没有尾随斜杠的REST路径时重定向。

实施例

http://mywebsite.my/it/products/brand/name => http://mywebsite.my/it/products/brand/name/
http://mywebsite.my/it/products => http://mywebsite.my/it/products/
http://mywebsite.my => http://mywebsite.my/

http://mywebsite.my/it/products/brand/name/code.html => ???

好吧,我不希望重写最后一个,当URL以 .html 结尾时,我不想要尾随斜杠。

我正在使用IIS7的URL重写模块,这是我的“斜线规则”。

<rule name="SLASHFINALE" stopProcessing="true">
    <match url="(.*[^/])$" />
    <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Redirect" redirectType="Permanent" url="{R:1}/" />
</rule>

换句话说,如果输入网址与正则表达式匹配(所有以斜杠结尾),我会重写相同的网址,添加尾部斜杠。

所以我的规则是相同的,但只需添加一点:重写所有URL,除了那些(已经)具有斜杠或者以“结尾的那些。”html“

我写了这个

(.*(?<!html)[^\/])$

但我无法理解为什么它不起作用。

1 个答案:

答案 0 :(得分:0)

IIS Javascript风格的正则表达式解析器不支持条件表达式。

我最终得到了这个:

<match url="(.*[^\.]...[^\/]$)" />

对我来说足够了。