Vue.js + Apache,如何为多个条目写重定向规则?



我有一个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($|/)匹配platformplatform/something,但不匹配platformsomething

相关内容

  • 没有找到相关文章

最新更新