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 重写包,正如 Mohit 所解释的那样,但您不需要编写自己的 web.config 文件,如果需要,您可以直接从 IIS 管理器执行此操作。
一旦安装了 URL Rewrite,您可能需要重新启动或重新启动 IIS,您应该会在站点的仪表板上看到它。我在站点级别而不是服务器级别执行此操作。
您将在其中添加一条规则。它必须使用正则表达式与模式 .*匹配请求 URL 的模式,这将匹配浏览器发送的所有 url。
在条件中,您将需要两个必须Match All 的条件。您需要两个输入:
这些不需要任何模式。
最后,在“操作”部分中,您需要使用重写url 来重写/附加查询字符串。这将使所有内容都发送到react-router而不是被服务器吸收。
此时,您可能希望停止处理更多规则,除非您还有其他不相关的业务逻辑也需要运行。
这将配置 IIS 将所有请求发送到站点的根目录,该根目录应该是 IIS 中设置的默认文档之一,最有可能是 index.html。React-router 将从那里接收它。
| 归档时间: |
|
| 查看次数: |
10207 次 |
| 最近记录: |