IIS7.5 web.config - 如何将路径与查询字符串匹配?

IIS7.5 web.config - How to match a path with query string?

我认为这可能是一个老问题,但我需要为客户的旧站点做一些重定向。他们正在使用 IIS7.5。

该网站有 3 种语言,默认使用英语,网址如下:

英语:https://olddomain.com

繁体中文:https://olddomain.com/index.php?q=zh-hant

简体中文:https://olddomain.com/index.php?q=zh-hans

请注意,该网站还有其他部分,例如“关于我们”。 旧的丑陋结构是:

英语:https://olddomain.com/index.php?q=about-us

繁体中文:https://olddomain.com/index.php?q=zh-hant/about-us

简体中文:https://olddomain.com/index.php?q=zh-hans/about-us

实际上,只需将所有旧站点的主页 AND/OR 部分重定向到新站点的主页就足够了。

我尝试添加并使用 :

        <httpRedirect enabled="true" exactDestination="true">
        <add wildcard="/index.php?q=zh-hans*" destination="https://newsitedomain.com/sc/somename" />
        <add wildcard="/index.php?q=zh-hant*" destination="https://newsitedomain.com/tc/somename" />
        <add wildcard="*" destination="https://newsitedomain.com/en/somename" />
    </httpRedirect>

英文版很好,但所有其他 TC 和 SC 版本也转到 EN 新站点。

我的配置有什么问题?

我读过Microsoft docs:但它没有提到任何查询字符串条件的处理。

非常感谢

似乎 IIS httpRedirect 无法处理 URL 的查询字符串。

解决方法如下:

<!-- redirect base URL -->
<system.webServer>
  <httpRedirect enabled="true" exactDestination="true">
    <add wildcard="/" destination="https://newsitedomain.com/en/somename" />
  </httpRedirect>
<system.webServer>
<!-- custom redirect by _redirect.html (or your custom php) -->
<location path="index.php">
  <system.webServer>
    <httpRedirect enabled="true" destination="_redirect.html$Q" exactDestination="true" />
  </system.webServer>
</location>

除了 web.config

之外,您还需要以下 _redirect.html 文件
<html>
  <head>
    <script>
      if (window.location.href.indexOf('q=zh-hans') !== -1) {
        window.location.href = 'https://newsitedomain.com/sc/somename';
      } else if (window.location.href.indexOf('q=zh-hant') !== -1) {
        window.location.href = 'https://newsitedomain.com/tc/somename';
      } else {
        window.location.href = 'https://newsitedomain.com/en/somename';
      }
    </script>
  </head>
</html>

另一种选择是使用 URL 重写模块。