繁体   English   中英

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来传递 state,并且 URL 看起来像这样: https://example.com/thing/edit;id=16;language=en;data=n%2Fa如果我在这些页面上刷新,我会收到 404 错误。
请注意,到这些页面的正常导航(例如通过单击链接)可以正常工作。
如果我手动输入带有正确参数和数据的 URL,我会得到 404。但是,错误似乎只发生在 URL 中存在编码字符时,例如上面的%2F 如果没有编码序列是 URL,则行为正确。

所需的 output 是,当我在具有包括 URL 编码字符在内的这些类型的 URL 的页面上刷新时,我没有得到 404,而是正确的页面,包括所有带分号的参数,用于 Angular 解析。

我对 Apache 和 htaccess 几乎一无所知,对于 SO 和 google 上的类似问题我能找到哪些提示并没有帮助。

比如上面的%2F

%2F (编码斜杠)和%5C (编码反斜杠)是特殊情况,默认情况下,如果这些编码字符出现在 URL 的 URL 路径部分中,Apache 将抛出 404。

这是一个“安全”功能,因为“允许解码斜线可能会允许不安全的路径”。 来源

要允许 URL 中的编码斜线,但不在服务器端解码它们,但允许通过 URL,您可以在服务器配置中或直接在<VirtualHost>容器中设置以下内容(并重新启动 Apache):

AllowEncodedSlashes NoDecode

NoDecode选项需要 Apache 2.4。 (在 Apache 2.2 上,您需要使用On - 但这也会在传递到后端之前解码斜杠。)

更新:这不能在.htaccess (或<Directory> )上下文中使用。

参考:

暂无
暂无

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

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