IIS重写规则以删除部分网址

时间:2018-03-22 13:14:43

标签: regex url-rewriting

我遇到了缓存css和js文件的问题,我在这里找到的解决方案是在链接中添加查询字符串和版本号。不幸的是,这不适用于所有浏览器。提供的另一个解决方案是将版本号嵌入到文件名中,并使用URL重写将其删除。

我的文件通常为http://Site/SiteScripts/Test_js.2018.2.11.6645.js

http://Site/Css/SiteCss.2018.2.11.6645.css

在这两种情况下,我都需要删除2018.2.11.6645部分。这是我从Assembly获得的版本,并随每个版本更改,但始终是yyyy.d + .d + .d +的格式,其中yyyy是当前年份,d +是一个或多个数字。如果它更容易,我只能使用最后4位数字,例如http://Site/SiteScripts/Test_js.6645.js

完成的结果应为http://Site/SiteScripts/Test_js.jshttp://Site/Css/SiteCss.css

我有以下正则表达式,我认为它是文件名和扩展名的正确匹配....

\w+\.\d+\.\d+.\d+\.\d+\.(js|css)

但是我无法解决如何删除版本和重建网址以获得完整路径和文件名以及没有版本的扩展名。

任何指针都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

您可以替换此正则表达式:

\d{4}.\d\.\d{2}\.

""将其删除,here is an example

正则表达式只匹配URL的版本部分。

答案 1 :(得分:1)

您可以使用(.*)(?:.\d{4}\.\d+\.\d+\.\d+)(.*),然后使用第1组和第2组获取所需的字符串。以下是使用javascript的示例:

var s = ['http://Site/SiteScripts/Test_js.2018.2.11.6645.js', 'http://Site/Css/SiteCss.2018.2.11.6645.css']

for (let i of s) {
  var re = /(.*)(?:.\d{4}\.\d+\.\d+\.\d+)(.*)/gm
  match = re.exec(i)
  console.log(match[1] + match[2])
}