反应路由器+ iis?如何启用路由

cho*_*bo2 9 iis url-rewriting reactjs react-router

我正在使用 react-router 并将其放入其中,但是我注意到当我从登录页面开始并浏览所有路由时,它可以正常工作。如果我只输入路径 url,我会得到 404。

我猜这与服务器不知道如何将其传递给我的客户端路由有关吗?

我找到了这篇文章,但我对某些人所说的更新 web.config 文件的答案感到有些困惑,但我没有,因为它只是一个 Reactjs。

编辑

这是我现在要重写的内容

在此处输入图片说明

当我尝试导航到不是索引页的 URL 时,我现在得到一个白页。

当我查看我的控制台时。我懂了

Uncaught SyntaxError: Unexpected token <
Run Code Online (Sandbox Code Playgroud)

转到 main.js 并抱怨这个"<!DOCTYPE html>"几乎似乎是因为我的 index.html 已合并到 javascript 文件中。

Moh*_*ani 15

让 React-Router 与 IIS 一起工作的关键是设置 URL 重写规则。在查看了其他人如何使用 IIS 设置 AngularJS SPA 应用程序之后,我提出了以下解决方案。

在您的服务器上下载并安装URL Rewrite(开发和生产)

设置规则以捕获任何不是文件和不是目录的 url 路由。或者,您可以否定要定期提供的任何实际目录。更多信息可以在这里找到Microsoft 的文档

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
  <rewrite>
    <rules>
      <rule name="ReactRouter Routes" stopProcessing="true">
        <match url=".*" />
        <conditions logicalGrouping="MatchAll">
          <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
          <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          <add input="{REQUEST_URI}" pattern="^/(docs)" negate="true" />
        </conditions>
        <action type="Rewrite" url="index.html" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

在您的基本 html 页面 (index.html) 中,向您的应用添加一个带有 href 属性的标签。

<base href='/path/to/my/app'/>
Run Code Online (Sandbox Code Playgroud)

  • 好的,我安装了 Url Rewrite,我制作了一个 web.config 并粘贴到您的代码中。然后我添加到正文 '&lt;base href='/path/to/my/app'/&gt; 但我不知道该将什么作为路径,或者是否将其放在正确的区域。 (3认同)

Jef*_*rdt 5

要扩展一点,您确实需要 URL 重写包,正如 Mohit 所解释的那样,但您不需要编写自己的 web.config 文件,如果需要,您可以直接从 IIS 管理器执行此操作。

一旦安装了 URL Rewrite,您可能需要重新启动或重新启动 IIS,您应该会在站点的仪表板上看到它。我在站点级别而不是服务器级别执行此操作。

您将在其中添加一条规则。它必须使用正则表达式与模式 .*匹配请求 URL 的模式,这将匹配浏览器发送的所有 url。

在条件中,您将需要两个必须Match All 的条件。您需要两个输入:

  • {REQUEST_FILENAME} 不是文件
  • {REQUEST_FILENAME} 不是目录

这些不需要任何模式。

最后,在“操作”部分中,您需要使用重写url 来重写/附加查询字符串。这将使所有内容都发送到react-router而不是被服务器吸收。

此时,您可能希望停止处理更多规则,除非您还有其他不相关的业务逻辑也需要运行。

这将配置 IIS 将所有请求发送到站点的根目录,该根目录应该是 IIS 中设置的默认文档之一,最有可能是 index.html。React-router 将从那里接收它。

  • 当我导航到 http:myhomepage 时,一切都加载正常。当我遇到问题时,这不是 http:myhomepage/somepage 。所以我不太确定这是一个编译问题 (2认同)