2017-04-26 40 views
2

我是新来React,只是学习如何路由工作。 hashHistory/#/paths/like/this)的伟大工程,但browserHistory/paths/like/this)看起来好多了。显然,browserHistory路径不正确的开箱,当我重新打开的网址,因为broweser要求/path/on/server不存在。React Router`browserHistory`:我必须在服务器上渲染吗?

的问题是:我必须使用服务器端渲染(所谓isomorphic rendering)为了使用/nice/paths,直接让用户打开页面,或者能够按Ctrl + R页,并保持他们在哪里,或有是否只有client-side呈现的选项?

谢谢。

回答

2

不,您可以轻松使用client-side呈现并允许用户使用像nice/paths/这样的路径。

因为这些路线都只是一个阵营方便,在服务器上不存在,直接将他们抛出的网页根本不存在错误。要解决这个问题,您应该将所有路线指向服务器的index.html(您的应用程序入口点),然后让React接管来处理路径。

在表达它会做这样的:

app.get('*', function(req, res) { 
    res.sendFile(__dirname + '/public/index.html') 
}) 

对于Apache服务器,这将是.htaccess

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteRule ^index\.html$ - [L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule . /index.html [L] 
</IfModule> 

对于其他服务器端语言,他们有自己的方法,而这指向到index.html基本适用于像Angular等所有SPA框架,因为逻辑是相同的。

+0

谢谢你,这是有道理的。 – SmxCde

1

Mrinalmech给了正确的答案,我只是想添加一个配置的一个例子Nginx的:

server { 

    server_name yourHostName.com; 
    listen 80; 

    root /path/to/app/folder; 
    index index.html; 

    location ~ ^[a-zA-Z0-9/_-]+$ { 
     rewrite (.*) /index.html last; 
    } 
} 
相关问题