[英]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 的有效替代品:
RewriteEngine on
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule (.*) /wwwroot/$1 [L]
我从这个超级用户的回答中得到了它。
有一个关于如何在 Apache 上托管的 Microsoft 文档,但它缺少重写部分。
根据上面的微软文档,我能够解决它:
不要将“wwwroot”文件夹放入Apache网站的根文件夹中。
而是将“wwwroot”文件夹的内容直接放到Apache网站的根文件夹中。
不要将任何 mod_rewrite 规则放在“.htaccess”文件中。
将此指令添加到“.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>
上面的示例用于直接从 Apache 网站的根文件夹运行 Blazor WebAssembly 应用程序。
如果您想从子文件夹(例如“/myappinfolder”)运行它,则必须更改一些内容:
将所有文件(包括“.htaccess”文件)移动到子文件夹“myappinfolder”中。
将“.htaccess”文件中的ErrorDocument
指令修改为:
ErrorDocument 404 /myappinfolder/index.html
将“index.html”文件中的基本 href 更改为:
<base href="/myappinfolder/" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.