繁体   English   中英

如何将 Blazor WebAssembly IIS 重写规则转换为 Apache mod_rewrite?

[英]How to convert Blazor WebAssembly IIS rewrite rules to Apache mod_rewrite?

创建了一个示例 Blazor WebAssembly 应用程序后,我将其部署到 IIS 和 Apache 以进行测试。

发布应用程序时,它生成了一个文件夹“wwwroot”和一个文件“web.config”:

在此处输入图像描述

“wwwroot”文件夹包含整个应用程序:

在此处输入图像描述

部署到 IIS 时,一切正常。

我目前正在努力的是部署到 Apache。

“web.config”文件包含两个重写规则。

规则1:

<rule name="Serve subdir">
    <match url=".*" />
    <action type="Rewrite" url="wwwroot\{R:0}" />
</rule>

规则 2:

<rule name="SPA fallback routing" stopProcessing="true">
    <match url=".*" />
    <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    </conditions>
    <action type="Rewrite" url="wwwroot\" />
</rule>

我已经尝试了几件事来让至少规则 1 与 mod_rewrite 一起使用,例如:

RewriteEngine on
RewriteRule ^.*?$ /wwwroot [QSA]

但我要么得到 404,要么得到无休止的重定向。

我的问题

如何将上述规则 1 和规则 2 转换为 Apache mod_rewrite 配置?


更新 1

我确实认为这个是规则 1 的有效替代品:

RewriteEngine on
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule (.*) /wwwroot/$1 [L]

我从这个超级用户的回答中得到了它。

更新 2

有一个关于如何在 Apache 上托管的 Microsoft 文档,但它缺少重写部分。

更新 3

根据上面的微软文档,我能够解决它:

  1. 不要将“wwwroot”文件夹放入Apache网站的根文件夹中。

  2. 而是将“wwwroot”文件夹的内容直接放到Apache网站的根文件夹中。

  3. 不要将任何 mod_rewrite 规则放在“.htaccess”文件中。

  4. 将此指令添加到“.htaccess”文件中:

     ErrorDocument 404 /index.html

我的测试应用程序的完整、最小的“.htaccess”文件如下所示:

ErrorDocument 404 /index.html

AddType application/wasm .wasm
AddType application/octet-stream .dll

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE application/octet-stream
    AddOutputFilterByType DEFLATE application/wasm
    <IfModule mod_setenvif.c>
        BrowserMatch ^Mozilla/4 gzip-only-text/html
        BrowserMatch ^Mozilla/4.0[678] no-gzip
        BrowserMatch bMSIE !no-gzip !gzip-only-text/html
  </IfModule>
</IfModule>

更新 4

上面的示例用于直接从 Apache 网站的根文件夹运行 Blazor WebAssembly 应用程序。

如果您想从子文件夹(例如“/myappinfolder”)运行它,则必须更改一些内容:

  1. 将所有文件(包括“.htaccess”文件)移动到子文件夹“myappinfolder”中。

  2. 将“.htaccess”文件中的ErrorDocument指令修改为:

     ErrorDocument 404 /myappinfolder/index.html
  3. 将“index.html”文件中的基本 href 更改为:

     <base href="/myappinfolder/" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM