静态网页的网址重写规则-使用带有其他参数的网址后返回404

Cra*_*ank 2 iis iis-7 url-rewriting url-parameters http-status-code-404

我使用IIS7的URL重写模块-因为很少静态文件的URL重写。

基本上我将/ pretty-url映射到/real-file-name.html

到目前为止,这很简单。

但是在将查询字符串添加到漂亮的url之后,它会抛出404状态代码。到目前为止,我还没有找到解决此问题的任何选择。有什么建议吗,或者我做错了什么?

配置如下:

<rewriteMaps>
  <rewriteMap name="CoolUrls">
<add key="/pretty-url" value="/real-file.html" />
    ... and so on ...
  </rewriteMap>
</rewriteMaps>
Run Code Online (Sandbox Code Playgroud)

和:

<rules>
  <clear />
    <rule name="Rewrite rule for CoolUrls" stopProcessing="true">
      <match url=".*" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{CoolUrls:{REQUEST_URI}}" pattern="(.+)" />
      </conditions>
      <action type="Rewrite" url="{C:1}" appendQueryString="true" />
    </rule>
</rules>
Run Code Online (Sandbox Code Playgroud)

任何带有查询的请求(?标记后的任何参数)都以404状态码结束。

Mar*_*urg 5

我假设您希望能够添加查询字符串,并且该查询字符串必须附加到重写的请求中。您可能不希望查询字符串包含在rewritemap中的匹配项中。因为这实际上就是您要使用的内容,{CoolUrls:{REQUEST_URI}}因为{REQUEST_URI}它还包含查询字符串。您应该将其替换为{CoolUrls:{R:0}}。

完整规则:

<rule name="Rewrite rule for CoolUrls" stopProcessing="true">
    <match url=".*" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{CoolUrls:{R:0}}" pattern="(.+)" />
    </conditions>
    <action type="Rewrite" url="{C:1}" appendQueryString="true" />
</rule>
Run Code Online (Sandbox Code Playgroud)

更新:您应该更新重写映射,因为{R:0}(URL)不包含URL的斜杠。因此,您的重写映射应为:

<rewriteMaps>
    <rewriteMap name="CoolUrls">
        <add key="pretty-url" value="/real-file.html" />
        <add key="another/pretty-url" value="/another/real-file.html" />
        ... and so on ...
    </rewriteMap>
</rewriteMaps>
Run Code Online (Sandbox Code Playgroud)