Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 如何在禁止的文件上正确应用重写规则? 目标_.htaccess_Mod Rewrite_Apache2.4_Errordocument_Mod Authz Core - Fatal编程技术网

.htaccess 如何在禁止的文件上正确应用重写规则? 目标

.htaccess 如何在禁止的文件上正确应用重写规则? 目标,.htaccess,mod-rewrite,apache2.4,errordocument,mod-authz-core,.htaccess,Mod Rewrite,Apache2.4,Errordocument,Mod Authz Core,如果请求是http://⋯/.htaccess, 不要显示该文件的内容, 改为显示错误文档403, 重写 仅限 http:// 到 https:// 问题 URL被重写为https://⋯/403.shtml, 相反 属于 这个 渴望的 https://⋯/.htaccess 细节 错误文档403和保护 .htaccess由web托管提供商设置 HTTPS重写在.htaccess文件中设置: RewriteEngine on RewriteCond %{HTTPS} !on RewriteRul

如果请求是
http://⋯/.htaccess

不要显示该文件的内容,
改为显示错误文档403,
重写 仅限 <代码>http:// 到 <代码>https://

问题 URL被重写为
https://⋯/403.shtml

相反 属于 这个 渴望的 <代码>https://⋯/.htaccess

细节 错误文档403和保护 .htaccess由web托管提供商设置

HTTPS重写在.htaccess文件中设置:

RewriteEngine on
RewriteCond %{HTTPS} !on
RewriteRule .* https://%{HTTP_HOST}/$0 [L,QSA,R=301]

.htaccess
文件中设置以下内容以重置默认的403 Apache
错误文档

ErrorDocument 403 default
ErrorDocument 403和.htaccess的保护由web托管提供商设置

主机似乎已将
ErrorDocument
指令配置为指向
403.shtml
文档的绝对URL,这将自然触发302重定向,而不是内部子请求。


<If "%{HTTPS} != 'on'">
    Require all granted
    RewriteEngine on    
    RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,QSA,R=301]
</If>
要求所有授权 重新启动发动机 重写规则。*https://%{HTTP_HOST}%{REQUEST_URI}[L,QSA,R=301]
如果将
错误文档403“禁止”
附加到.htaccess文件中,则根本不会重写URL。它仍然是
http://⋯/.htaccess
而不是所需的
https://⋯/.htaccess
http://⋯/不存在的
已正确重写为
https://⋯/不存在
,无论是
错误文档404的类型(无论是自定义消息还是内部重定向)。因此,我猜罪魁祸首不是ErrorDocument指令,而是主配置文件中假定的
Require all denied
指令,用于保护.htaccess文件。
http://⋯/.htaccess
应该只返回
403
403状态不会重定向到httpsURL@anubhava我希望这个网站的所有页面都使用HTTPS,包括错误页面。我不希望用户认为该站点(部分)不安全。在服务器配置中,
errordocument403
设置为什么?我已将其设置为默认值。现在我得到了简单的硬编码错误消息“禁止您没有访问此资源的权限”。不幸的是,URL仍然是
http://⋯/.htaccess
而不是https://⋯/.htaccess
。我认为外部重定向是由主配置文件中假定的
Require all denied
指令修改的,它保护了.htaccess文件。“不幸的是,URL仍然是http”-是的,这真的是个问题吗?但它是403,而不是302(就像我之前假设的那样)。发出3xx重定向不会提供更好的安全性。如果您需要更多的安全性,那么考虑执行HSTS(因此浏览器从一开始就请求HTTPS——不重定向)。在
.htaccess
能够运行之前,请求在服务器配置中被阻止。最好在发出403之前重定向到HTTPS。您应该在HTTP请求上使用403进行响应(现在就是这样做的)。这里的“问题”是外部重定向到
403.shtml
。如果403错误页面是动态生成的,包含用户的姓名和个人资料照片,以及一些个性化的导航链接,那么没有HTTPS仍然安全吗,根据用户的站点浏览历史记录?服务器配置阻止的其他系统文件或您正在阻止的文件?但是使用
errordocument403default
可以得到一个简单的直接响应,这很好。然后,您可以使用自定义403(您似乎正在执行此操作)覆盖此操作,您可以在其中检查URL路径并根据请求的URL返回自定义响应。如果您愿意,您的自定义403还可以触发302重定向到HTTPS(用于选择包含更多个人信息的URL)。然而,如果安全性确实是一个问题,那么考虑执行HSTS。虽然这个代码可以提供一个问题的解决方案,但最好还是添加上下文来说明它的工作原理。这可以帮助未来的用户学习并最终将这些知识应用到他们自己的代码中。在解释代码时,用户也可能会给予积极的反馈/支持。很好的解决方案(+1)。
表达式更改处理顺序,以便覆盖服务器配置中生成的403响应。但是,您仍然需要确保
ErrorDocument
没有重定向到
403.shtml
文档,如我在回答中所述,否则您将得到一个301,然后是一个302(可能根本没有403)。然而,我仍然怀疑您是否应该这样做,因为可能是“恶意的”对系统文件的请求(如问题中提到的
.htaccess
本身)。在这种情况下,最好是最小的403响应(无重定向)——不管请求是HTTP还是HTTPS,而不是301(通过HTTP),然后是403(通过HTTPS)。应用程序生成的任何403都应该在重定向到HTTPS之后。