【问题标题】:IIS 7 URL Rewrite Rule Not FiringIIS 7 URL 重写规则未触发
【发布时间】:2010-09-15 15:20:54
【问题描述】:

我在 IIS 7 中为 javascript 和 css 版本控制创建了一个重写规则。该规则定义如下:

<rewrite>
   <rules>
     <rule name="Js/Css Cache Rewrite" stopProcessing="true">
       <match url="(.+/public/(javascript|css)/(Debug|Release)/.+\.)\d+\.(js|css)" />
       <action type="Rewrite" url="{R:1}{R:4}" logRewrittenUrl="true" />
     </rule>
   </rules>
 </rewrite>

当我针对匹配的正则表达式手动测试 url 时。网址遵循以下模式: http://mytestsite.com/public/javascript/Release/SomeDir/jsfile.20100915140743.js

对我可能缺少的配置有什么想法吗?

【问题讨论】:

    标签: iis iis-7 url-rewriting


    【解决方案1】:

    您的正则表达式以(.+/public/ 开头,它转换为“一个或多个字符,后跟/public/”。 IIS 传递给您的 URL 以 /public/public/ 开头,两者都不匹配您的正则表达式。你可能需要((^|.*/)public/ 之类的东西。

    【讨论】:

    • 如果传入的 URL 是 /public/... 或 public/... 这不是更简单吗?即 (^|/)public/
    • nickyt:是的,它会更简单,但 URL 也可以是“/blah/blah/blah/public/...”
    • 是的,你已经接近问题所在了。由于在 IIS 中配置它的级别,传入的 url 最终成为“public/...”。如果我在更高级别进行配置,则它具有完整的 url。我将正则表达式更改为以下内容: (.*public/(javascript|css)/(Debug|Release)/.+\.)\d+\.(js|css)
    【解决方案2】:

    由于在 IIS 中配置它的级别,传入的 url 最终变成了“public/...”。如果我在更高级别进行配置,则它具有完整的 url。我将我的正则表达式更改为以下内容: (.*public/(javascript|css)/(Debug|Release)/.+.)\d+.(js|css) 并且它可以工作。

    【讨论】:

      【解决方案3】:

      试试这个

       <?xml version="1.0" encoding="UTF-8"?>
      <configuration>
          <system.webServer>
              <rewrite>
                  <rules>
                      <rule name="permalink">
                          <match url="article/(\D+)(\/)*$" />
                          <action type="Rewrite" url="http://mywebsite.com/article.aspx?id={R:1}" />
                      </rule>
                  </rules>
              </rewrite>
          </system.webServer>
      </configuration>
      

      【讨论】:

      • 你应该发布更多这样的答案,而不是你的垃圾邮件答案。
      猜你喜欢
      • 2014-05-01
      • 2020-07-03
      • 2011-05-07
      • 2014-01-05
      • 1970-01-01
      • 2014-08-22
      • 1970-01-01
      • 2014-10-27
      相关资源
      最近更新 更多