我有一个vue.js应用程序,由2个入口点(2 SPA's)
组成。其中一个是index.html
,为客户端网站服务,另一个是为平台服务(platform.html
)
根据Vue CLI文档,我在.htacess
文件
<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,当我在myUrl.com/platform
输入它不会改变的平台。我已经尝试了以下方法,但无法使其工作
<IfModule mod_rewrite.c>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^platform(.*)$ platform.html [L]
RewriteRule ^(.*)$ index.html [L]
</IfModule>
</IfModule>
假设任何以platform
为前缀的URL都应该发送到platform.html
,其他所有内容都应该发送到index.html
,那么您可以在根.htaccess
文件中执行以下操作:
DirectoryIndex index.html
RewriteEngine On
# Optimisation - prevent rewritten requests for the front-controller being reprocessed
RewriteRule ^index.html$ - [L]
RewriteRule ^platform.html$ - [L]
# Prevent static resources being routed through the app
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# Any URLs that start "/platform" (whole path segment only) are sent to "/platform.html"
RewriteRule ^platform($|/) platform.html [L]
# All other URLs are sent to "/index.html"
RewriteRule . index.html [L]
此处不需要RewriteBase
指令。
<IfModule>
包装器,除非这些指令是可选的(它们不是)。(以这种方式嵌套这些包装器没有意义。)关于这个问题的更多讨论,请参阅我对以下问题的回答:检查mod_write真的有必要吗?请注意,对文档根目录的请求实际上并没有被上面的指令重写,而是由DirectoryIndex
指令发送给index.html
——这通常已经在服务器上配置了,所以这里可能不需要该指令。
更新:由于您的url类似于/platform/<subroute>
,而不是/platform<something>
,因此上述规则中的正则表达式最好为^platform($|/)
,而不是简单地为^platform
,以便仅匹配整个路径段并避免可能匹配太多,例如/platformsomething
。(我已经更新了上面的代码)
^platform($|/)
匹配platform
或platform/something
,但不匹配platformsomething
。