IIS7 中的 URL 重写

IIS7 中的 URL 重写

我公司的网站有一个目录http://website.net/files其中包含公司一半人使用的模糊数据。它不符合我们新的网站结构,我想将其移动到具有 DNS 的新服务器http://files.website.net。我遇到的问题是,许多用户仍然会有类似这样的链接http://website.net/file/app.exe

有人告诉我 URL 重写是强制重定向并保持查询的最佳选择,但我似乎忽略了一些东西。任何帮助都将不胜感激。

在此处输入图片描述

网页配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="wordpress" patternSyntax="Wildcard">
          <match url="*" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Rewrite" url="index.php" />
        </rule>
                <rule name="files" stopProcessing="true">
                    <match url="^files/(.*)" ignoreCase="true" />
                    <action type="Redirect" url="http://downloads.openeye.net/files/{R:1}" logRewrittenUrl="true" />
                </rule>
      </rules>
    </rewrite>
    <httpErrors>
      <remove statusCode="404" subStatusCode="-1" />
      <error statusCode="404" prefixLanguageFilePath="" path="/index.php?error=404" responseMode="ExecuteURL" />
    </httpErrors>
  </system.webServer>
</configuration>

答案1

您的屏幕截图中存在多个问题:

  1. 模式字段中的正则表达式模式只会匹配 URL 中最后一个斜杠后的数字。“files/subdir/1234”将匹配。“files/subdir/app.exe”将不匹配。您需要^files/([_0-9a-z-]+)/(.*)在模式字段中。或者,如果您需要的只是带有 /files 的任何内容,您可以使用^files/(.*)。测试模式功能是您的好朋友。

  2. 我会检查忽略大小写,但这取决于您的具体情况。

  3. 操作类型应为“重定向”

  4. 假设您正在使用^files/(.*)正则表达式模式,则重定向 URL 应该是: http://downloads.openeye.net/files/{R:1}

这意味着进入http://yourdomain.com/files/whatever.exe将被重定向到http://downloads.openeye.net/files/whatever.exe

或者如果他们有更长的 URL,例如http://yourdomain.com/files/dir1/dir2/whatever.exe,它仍将被添加到新 URL 的末尾(http://downloads.openeye.net/files/dir1/dir2/whatever.exe)。

相关内容