反应路由器的apache配置与browserHistory和baseName子目录

Pet*_*ter 7 apache mod-rewrite react-router

我的应用程序位于主网站的子目录中.我已经实现了basename和browserHistory,并将以下推荐的apache重写代码放入app文件夹中的.htaccess:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.html [L]
Run Code Online (Sandbox Code Playgroud)

这个推荐的apache重写可以将browserHistory URL返回给应用程序index.html.由于某种原因(见下文),它没有在索引页面HTML中找到EMBEDDED的"style.css"和"brundle.js".我在示例.htaccess文件中看到的唯一不同的是我的RewriteBase值为"/ react_librivox_search",因为我的应用程序位于该站点的子文件夹中.

RewriteBase /react_librivox_search
Run Code Online (Sandbox Code Playgroud)

我已经使用各种不同的开头和结尾斜杠测试了.htaccess中的路径和文件,问题不是这样.

问题似乎是react应用程序正在为包含PATH变量的一部分的文件设置GET值,该变量应该只是react-router定义的一部分:

<Route path="/book/:id" component={BookDataDisplay}/>
Run Code Online (Sandbox Code Playgroud)

请注意,附加路径段"/ book /"将附加到基本URL,并且当在THAT目录中找不到文件(实际上并不存在)时,服务器将为丢失的文件返回"index.html",说明了librivox_search.css文件的mime-type错误和bundle.js文件的"<"错误.

The stylesheet http://jstest.dd:8083/react_librivox_search/book/librivox_search.css was not loaded because its MIME type, “text/html”, is not “text/css”.       librivox_search.css (embedded in index.html)

SyntaxError: expected expression, got '<'       bundle.js (embedded in index.html)
Run Code Online (Sandbox Code Playgroud)

同样意外地将"book"添加到URL也在这里工作.嵌入的index.html文件都不在该子目录中.但我希望在路径中保留"book",因为它标识了传递给路由的KIND数据...它将其与其他类型的数据区分开来.我只是不想将它发送到SERVER(但也许是无法避免的),因为实际的index.html嵌入文件不存在.

我想重写"/ react_librivox_search/book"作为"/ react_librivxo_search"可能会起作用,但它似乎是一种hacky方式.而且我不想将重复的bundle.js文件放在多个目录中(这有效,但是维护噩梦将是什么,毫无疑问是不好的做法).

或者是否建议在REAL"book"子文件夹中放置一个单独的.htaccess,该子文件夹根据文件请求返回"librivox_search.css"和"bundle.js"(在基本目录中)?