为啥我的 React 应用程序不能使用我的 Apache .htaccess 文件来防止 404?

Posted

技术标签:

【中文标题】为啥我的 React 应用程序不能使用我的 Apache .htaccess 文件来防止 404?【英文标题】:Why won't my React application work with my Apache .htaccess file to prevent 404s?为什么我的 React 应用程序不能使用我的 Apache .htaccess 文件来防止 404? 【发布时间】:2021-11-20 02:05:08 【问题描述】:

我将 React 16.12.0 与 Apache 2.4 一起使用。即使我可以导航到一个 URL,我似乎也无法通过在浏览器中输入来访问一个 URL。我在我的 App.js 文件中设置了这个...

      <div className="auth-wrapper">
        <div className="auth-inner">
          <Switch>
            <Route exact path="/" component=Map />
            <Route path="/add" component=Add />
            <Route path="/edit/:id" component=Edit />
            <Route path="/search" component=Search />
            <Route path="/nocoords" component=NoCoordsSearch />
            <Route
              path="/directory-additions-updates/:id"
              component=DirectoryAddUpdate
            />
            <Route
              path="/directory-additions-updates/"
              component=DirectoryAddUpdate
            />
            <Route path="/:coop_id/people" component=AddPerson />
            <Route path="/person/:id/edit" component=EditPerson />
            <Route path="/:coop_id/listpeople" component=ListPeople />
          </Switch>
        </div>
      </div>

我已经创建了这个 .htaccess 文件

cat /var/www/html/client/.htaccess
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
 RewriteCond %REQUEST_FILENAME !-f
 RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.html [L]

但是,尽管我可以导航到诸如“/search”之类的 URL,但当我在浏览器栏中键入该 URL 或在该页面上单击“刷新”时,我得到了 404。我还需要做什么来配置我的应用程序,以便我可以通过键入 URL 来访问它?

【问题讨论】:

【参考方案1】:

有几件事情出错了。我的 .htaccess 文件与我的“index.html”文件不在同一目录中,因此必须移动。

其次,需要将此添加到我的 Apache 虚拟配置中

    <Directory "/var/www/html/client/build/">
      Options Indexes FollowSymLinks
      AllowOverride all
    </Directory>

其中 /var/www/html/client/build/ 是包含 index.html 文件的目录。

【讨论】:

以上是关于为啥我的 React 应用程序不能使用我的 Apache .htaccess 文件来防止 404?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能为我的 React 服务器端渲染应用导入 CSS 文件?

为啥我的代码不能在 web 中的 react-native 代码中运行

为啥 setState() 在我的情况下不能在 React 中工作?

为啥我不能将其转换为自定义的 React 钩子?

React:为啥我不能向我的组件添加自定义样式类?

为啥我不能运行我的 React Native 项目?