2
votes

I'am really struggling on this one.

I have a VueJs App that is served by a kestrel server on a C# App :

            PhysicalFileProvider fileProvider = new PhysicalFileProvider(
              Path.Combine(builderEnv.ContentRootPath, "FrontEnd"));

            DefaultFilesOptions defoptions = new DefaultFilesOptions();
            defoptions.DefaultFileNames.Clear();
            defoptions.FileProvider = fileProvider;
            defoptions.DefaultFileNames.Add("index.html");
            app.UseDefaultFiles();

            var spaStaticFileOptions = new StaticFileOptions
            {
                FileProvider = fileProvider,
                RequestPath = "/app"
            };

            app.UseStaticFiles(spaStaticFileOptions);

Now the frontend is served to the user with a reverse proxy configured on apache. Here's the conf :

 <VirtualHost *:443>
        ProxyPreserveHost On
        SSLProxyEngine on
        SSLProxyVerify none
        SSLProxyCheckPeerCN off
        SSLProxyCheckPeerName off
        SSLProxyCheckPeerExpire off
        ProxyPass / https://127.0.0.1:5001/
        ProxyPassReverse / https://127.0.0.1:5001/
        ErrorLog /var/log/apache2/error.log
        CustomLog /var/log/apache2/access.log common
        SSLEngine on
        SSLCertificateFile /usr/local/share/ca-certificates/app.crt
        SSLCertificateKeyFile /usr/local/share/ca-certificates/app.key
</VirtualHost>

So basically when i go on the domain.net/app/ it goes like that : Apache reverse proxy => Localhost kestrel => VueJs Static Files.

Everything is working fine. VueJs is targeted and the history mode kicks in.

BUT, when i refresh the current page, let's say domain.net/app/create-node i have a 404 because apache rightfully is not aware of this page.

So i tried to put in place a rewriting engine. I need only the sub-url "app" to be rewrited. But i cannot make it work.

It should goes like that : domain.net/app/create-node => domain.net/app/index.html So that vueJs router can take the lead.

My last try (after one hundred ones) was this :

<Directory "/app">
        RewriteEngine On
        RewriteCond %{REQUEST_URI} !app/index\.html$
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^app/.*$ app/index.html [L]
</Directory>

Can someone please help me !