我已经在apache2上运行应用程序。
在我的应用程序中,共有3页:home,about,register
我有3条这样的路线:
<Route path="/home" component={....} />
<Route path="/about" component={.....} />
<Route path="/register" component={....} />
因此,应用程序运行完美,当我访问www.onlyexampleurl.com时,app正确加载。我可以在家里列出,关于,注册罚款。
但问题是,当我直接访问www.onlyexampleurl.com/about时,我从apache获得404,因为应用程序是从根路径下载&#39; /&#39;。
我该如何解决?当我把www.onlyexampleurl.com/about放到浏览器上时,我想从我的应用程序加载关于页面的内容,但是我从apache得到了404.
感谢您的帮助!
答案 0 :(得分:0)
您需要将所有请求重定向到您的条目文件(假设它是index.html)。放入.htaccess
:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.html [QSA,L]
这是单页应用的标准解决方案。
答案 1 :(得分:0)
这是对该问题的最新答复,但我愿意分享有效的方法。以防万一有人遇到相同的问题。
这是假设使用Ubuntu OS,但我在Linux上还没有成功:
从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>
希望现在对您的帮助与对我一样多!