我通过使用“ React js”(前端)和“ Node js”(后端)来创建仪表板。现在项目已完成,我需要在Apache服务器上部署并托管该项目。 我尝试过运行“ npm run build”,然后将build文件夹的所有文件复制到服务器,但仍未运行。
Error: The requested URL /Dashboard was not found on this server
那么有人可以帮我这个忙吗?因为我是这些网站开发新手。 如果有人告诉我实现此目标所需的配置,将会很有帮助。
package.json
{
"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”文件:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.html [QSA,L]
但仍然没有运气。
答案 0 :(得分:0)
从post from Reddit开始,我已经执行了某些步骤,我可以证明此方法可以使SPA通过正确的路由在Apache Web服务器中运行。
引用:
1)在apache2.conf
中的etc/apache2/
中,我将AllowOverride
变成了All
。我还在文件中添加了服务器名localhost。 (我不知何故跳过了最后一句话,但最后还是很好用)
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
2)在hosts.debian.tmpl
中找到的/etc/cloud/templates
文件中,我在文件中添加了127.0.0.1 <yourdomain.com>
相似之处。
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开发时,我真的不确定我是否正确配置了VirtualHost,因此通常要做的是首先创建一个虚拟的index.html,例如Hello World示例。当我确认可以在浏览器中看到Hello World时(这意味着我正确配置了VirtualHost),我将build
文件夹的内容转储到虚拟index.html所在的位置。 / p>
希望现在对您的帮助与对我一样多!
答案 1 :(得分:0)
我的解决方案:
Apache:
我正在运行一个带有多个React-App的Apache服务器,可以通过Aliases进行访问,例如/abc/app/
或xyz/app/
。对于这些路径,我调整了虚拟主机配置中的<Directory>...</Directory>
区域:
<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
中添加了以下内容:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.html [QSA,L]
反应路由器> 4:
但最重要的是,我调整了package.json
和.env
文件。如果您使用环境文件,则可以在生产或发布环境文件中添加以下几行(随路径调整的obv):
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
行:
"homepage":"link.to.your.page/abc/app/"
在您的index.js
中,或在使用BrowserRouter或Router的任何地方,您都可以像这样修改代码:
let PATH = process.env.REACT_APP_ROOT_PATH // Or, if you prefer it hard coded "/abc/app"
<BrowserRouter basename={PATH} > <App/> </BrowserRouter>
答案 2 :(得分:0)
React 适用于前端。我猜你想说,apache 和 nodeJs