Htaccess 重定向到 index.html,包括分号和 urlencoded 字符
Htaccess redirect to index.html including semicolons and urlencoded characters
我有一个 Angular 应用程序,所以我希望将所有流量重定向到 index.html,以便 Angular 可以处理它。
目前,我有以下 htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.html [L,NC,QSA,NE]
</IfModule>
当我刷新页面时,所有内容都会正确刷新,但一些重要页面使用 Angular 的 ActivatedRoute.paramMap
传递状态,URL 看起来像这样:
https://example.com/thing/edit;id=16;language=en;data=n%2Fa
如果我在这些页面上刷新,我会收到 404 错误。
请注意,正常导航到这些页面(例如通过单击链接)工作正常。
如果我用正确的参数和数据手动输入 URL,我会得到 404。但是,错误 似乎只在 [=35= 中有编码字符 时发生],比如上面的%2F
。如果没有编码序列是 URL,行为是正确的。
期望的输出是,当我在包含 URL 类型(包括 URL 编码字符)的页面上刷新时,我没有得到 404,而是正确的页面,包括所有带分号的参数,供 Angular 解析。
我对 Apache 和 htaccess 几乎一无所知,我可以找到关于 SO 和 google 类似问题的提示也没有帮助。
such as the above %2F
%2F
(编码斜杠)和 %5C
(编码反斜杠)是特殊情况,默认情况下,如果这些编码字符出现在 URL 路径部分,Apache 将抛出 404 URL.
这是一项“安全”功能,因为“允许对斜杠进行解码可能会允许不安全的路径。” (source)
要允许 URL 中的编码斜杠,但不在服务器端对其进行解码,但允许 URL 通过,您可以在服务器配置中或直接在<VirtualHost>
容器(并重启 Apache):
AllowEncodedSlashes NoDecode
NoDecode
选项需要 Apache 2.4。 (在 Apache 2.2 上,您需要使用 On
- 但这也会 解码 斜杠,然后再传递到后端。)
请注意,AllowEncodedSlashes
指令不能在 .htaccess
(或 <Directory>
)上下文中使用。
参考:
我有一个 Angular 应用程序,所以我希望将所有流量重定向到 index.html,以便 Angular 可以处理它。
目前,我有以下 htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.html [L,NC,QSA,NE]
</IfModule>
当我刷新页面时,所有内容都会正确刷新,但一些重要页面使用 Angular 的 ActivatedRoute.paramMap
传递状态,URL 看起来像这样:
https://example.com/thing/edit;id=16;language=en;data=n%2Fa
如果我在这些页面上刷新,我会收到 404 错误。
请注意,正常导航到这些页面(例如通过单击链接)工作正常。
如果我用正确的参数和数据手动输入 URL,我会得到 404。但是,错误 似乎只在 [=35= 中有编码字符 时发生],比如上面的%2F
。如果没有编码序列是 URL,行为是正确的。
期望的输出是,当我在包含 URL 类型(包括 URL 编码字符)的页面上刷新时,我没有得到 404,而是正确的页面,包括所有带分号的参数,供 Angular 解析。
我对 Apache 和 htaccess 几乎一无所知,我可以找到关于 SO 和 google 类似问题的提示也没有帮助。
such as the above
%2F
%2F
(编码斜杠)和 %5C
(编码反斜杠)是特殊情况,默认情况下,如果这些编码字符出现在 URL 路径部分,Apache 将抛出 404 URL.
这是一项“安全”功能,因为“允许对斜杠进行解码可能会允许不安全的路径。” (source)
要允许 URL 中的编码斜杠,但不在服务器端对其进行解码,但允许 URL 通过,您可以在服务器配置中或直接在<VirtualHost>
容器(并重启 Apache):
AllowEncodedSlashes NoDecode
NoDecode
选项需要 Apache 2.4。 (在 Apache 2.2 上,您需要使用 On
- 但这也会 解码 斜杠,然后再传递到后端。)
请注意,AllowEncodedSlashes
指令不能在 .htaccess
(或 <Directory>
)上下文中使用。
参考: