首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Apache服务器上部署和托管react应用程序

如何在Apache服务器上部署和托管react应用程序
EN

Stack Overflow用户
提问于 2019-06-14 17:23:09
回答 3查看 1.9K关注 0票数 1

我已经创建了一个仪表板,前端使用"React js“,后端使用"Node js”。现在项目已经完成,我需要在Apache服务器上部署和托管该项目。我尝试过运行"npm run build“,然后将build文件夹的所有文件复制到服务器上,但仍然没有运行。

代码语言:javascript
复制
Error: The requested URL /Dashboard was not found on this server

有人能帮我解决这个问题吗?因为我对整个web开发的东西都是新手。如果有人告诉我实现这一点所需的配置是什么,那将是非常有帮助的。

package.json

代码语言:javascript
复制
{
  "name": "eclaims",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "alert-node": "^1.2.4",
    "await": "^0.2.6",
    "axios": "^0.18.0",
    "browser-history": "^1.0.1",
    "canvasjs": "^1.8.1",
    "chart.js": "^2.8.0",
    "cors": "^2.8.5",
    "express-redirect": "^1.2.2",
    "history": "^4.9.0",
    "http-serve": "^1.0.1",
    "mdbreact": "^4.14.0",
    "oracledb": "^3.1.2",
    "passport": "^0.4.0",
    "passport-local": "^1.0.0",
    "react": "^16.8.6",
    "react-background-image-loader": "0.0.5",
    "react-bootstrap": "^0.32.4",
    "react-canvas-js": "^1.0.1",
    "react-chartjs-2": "^2.7.6",
    "react-dom": "^16.8.6",
    "react-dropdown": "^1.6.4",
    "react-dropdown-button": "^1.0.11",
    "react-native": "^0.59.8",
    "react-router": "^5.0.0",
    "react-router-bootstrap": "^0.25.0",
    "react-router-dom": "^4.3.1",
    "react-router-redirect": "^1.0.1",
    "react-scripts": "2.1.8",
    "react-select": "^2.4.3",
    "reactstrap": "^8.0.0",
    "redirect": "^0.2.0"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": [
    ">0.2%",
    "not dead",
    "not ie <= 11",
    "not op_mini all"
  ]
}

我还尝试创建了".htaccess“文件:

代码语言:javascript
复制
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.html [QSA,L]

但还是不走运。

EN

回答 3

Stack Overflow用户

发布于 2019-06-19 02:21:55

我已经从这个post from Reddit中遵循了某些步骤,我可以证明这可以让SPA在Apache web服务器上以正确的路由运行。

引述如下:

1)在位于etc/apache2/apache2.conf中,我将AllowOverride改为All。我还在文件中添加了Servername localhost。(不知何故,我跳过了这最后一句话,但它最终还是工作得很好)

<目录/var/www/>选项索引FollowSymLinks AllowOverride All需要全部授予

2)在/etc/cloud/templates中找到的hosts.debian.tmpl文件中,我将127.0.0.1 <yourdomain.com>添加到其他相似的ips所在的文件中。

127.0.0.1 yourdomain.com

3)我运行了sudo a2enmod rewrite。然后我通过service apache2 restart重启了apache服务器。这将打开mod_rewrite。

最后,在我的项目文件夹/var/www/html中,除了我的index.html文件之外,我还创建了一个.htaccess文件,并添加了以下内容:

RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^.*$ / L,QSA

假设您已经运行了npm run build,然后将build文件夹中的所有内容复制到您的公共目录中,这应该是可行的。

当我第一次启动web dev的时候,我并不确定我的VirtualHost配置是否正确,所以我通常首先做的是创建一个虚拟的index.html,比如Hello World example。当我确认能够在浏览器中看到Hello World时(这意味着我得到了正确的VirtualHost配置),我将build文件夹的内容转储到虚拟index.html所在的位置。

票数 1
EN

Stack Overflow用户

发布于 2020-10-05 22:23:36

我的解决方案是:

Apache:

我正在运行一个带有多个React-Apps的Apache Server,这些React-Apps可以通过别名访问,例如/abc/app/xyz/app/。对于该路径,我调整了虚拟主机配置中的<Directory>...</Directory>区域:

代码语言:javascript
复制
<VirtualHost *:443>
RewriteEngine On

    Alias /abc/app "/var/www/abc"
    Alias /xyz/app "/var/www/xyz"

    <Directory "/var/www/abc">
      Options Indexes FollowSymLinks
      AllowOverride All
      Require all granted
     </Directory>


    <Directory "/var/www/xyz">
      Options Indexes FollowSymLinks
      AllowOverride All
      Require all granted
     </Directory>

    [...]

</VirtualHost *:443>

此外,我根据React Docs/var/www/abc/.htaccess中添加了以下内容

代码语言:javascript
复制
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.html [QSA,L]

React路由器> 4:

但最重要的是,我调整了package.json.env文件。如果您使用环境文件,则可以将以下行(obv根据您的路径进行调整)添加到生产或发布环境文件中:

代码语言:javascript
复制
PUBLIC_URL=https://link.to.your.page/abc/app/
REACT_APP_ROOT_PATH=/abc/app

不重命名PUBLIC_URL。您可以在REACT_APP_之后更改所有内容

从package.json中删除homepage

或者,如果不使用.env文件,可以在package.json中调整homepage行,如下所示:

代码语言:javascript
复制
 "homepage":"link.to.your.page/abc/app/"

在您的index.js中,或者在您使用BrowserRouter或路由器的任何地方,您可以这样修改您的代码:

代码语言:javascript
复制
 let PATH = process.env.REACT_APP_ROOT_PATH // Or, if you prefer it hard coded "/abc/app"
 <BrowserRouter basename={PATH} > <App/> </BrowserRouter>
票数 0
EN

Stack Overflow用户

发布于 2021-08-10 14:03:33

React是用于前端的。我猜你想说,apache和nodeJs

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56595175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档