当应该抛出403响应时,抛出404响应。

3

I have the next rule:

RewriteCond %{HTTP_REFERER} ^$ [OR]
RewriteCond %{HTTP_REFERER} !^https?://itransformer.*$ [NC]
RewriteRule \.(gif|jpe?g|png|wbmp)$ - [R=403,L]

在主要的.htaccess文件中。当任何人尝试热链接图片时,他将得到403响应。但是,他却得到了404响应。如果我注释掉上面的行,就不会出现错误。
似乎是由于Twig异常模板引起的。
我重写了一些Twig异常模板中的错误模板。我通过添加文件/app/Resources/TwigBundle/views/Exception/error404.html.twig成功覆盖了404错误模板。
尝试覆盖403错误模板。尝试添加:/app/Resources/TwigBundle/views/Exception/error403.html.twig但没有显示。
Apache配置中没有ErrorDocument,也没有.htaccess文件。 为什么它会抛出404响应,而不是403?

你能测试一下:ReWriteRule .*.(gif|jpe?g|png|wbmp)$ - [F] 吗? - ColoO
我已经有一段时间没有使用Apache了,但是你的RewriteRule不应该有一个要重定向到的URI吗?或者这里的'-'字符意味着什么? - nealio82
@Nealio - - 表示没有 URI 重定向。它应该只是抛出一个带有无 URI 重定向的 403 响应。 - Manolo
2个回答

0
我已经找到了问题:
当异常来自于一个 .htaccess 文件或 Apache 配置时,虽然 /app/Resources/TwigBundle/views/Exception/ 是自定义异常页面的框架路径,但你必须在 .htaccess 文件或 Apache 配置中也指定路径,像这样:
ErrorDocument 403 /errorTemplatesPath/error403.html.twig
ErrorDocument 404 /errorTemplatesPath/error404.html.twig

0

你能试试这个规则吗:

RewriteCond %{HTTP_REFERER} !^https?://mysite\.com [NC]
RewriteRule \.(gif|jpe?g|png|wbmp)$ - [NC,F]

使用 [NC,F] 标志不会有任何变化。另一方面,当 HTTP_REFERER 为空时,我也想进行重写。因此,第一行应该像问题中那样。 - Manolo
好的,已经编辑并删除了第一个条件。但如果仍然抛出404错误,则可能是由于您的框架引起的。 - anubhava
可能吧,但我不知道如何实现。我正在按照文档所说的做。 - Manolo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接