我有一个.htaccess文件,目前看起来像:
订购允许,拒绝所有人都否认文件>选项全部-索引IndexIgnore *#使用404(而不是403)响应/ include /RewriteEngine开重定向匹配404 ^ / include(/?| /.*)$
我试图防止所有人都知道/ include /存在,但是我遇到了一个问题。
尽管访问http://www.example.com/include会得到404,但浏览器会添加一个斜杠(因此会给出http://www.example.com/include/),该斜杠表明该目录确实存在,但已被伪装。当访问实际的404时,不添加斜杠。
有没有办法防止这种行为?
1。您可以使用DirectorySlash Off
告诉Apache不要在目录末尾添加斜杠。
2。
如果您实际上不使用重写引擎(基于提供的代码),为什么要使用RewriteEngine On
? RedirectMatch
与mod_rewrite
无关。3。
如果要在此处使用mod_rewrite,请尝试以下规则-它会返回/include
文件夹的404代码(带斜杠和不带斜杠)以及其中的任何资源文件(例如/include/main.php
等)。RewriteEngine On
RewriteRule ^include(/|/.+)?$ - [R=404,L]
RewriteEngine On
RewriteRule ^include(/|/.+)?$ - [R=404,L]
这些行不会阻止诸如include/.php
,include/.ht
,include/.htaccess
之类的请求(相反,您会收到403 Forbidden
错误,表明目录include
存在)。相反,一个人想禁止访问所有dot-files以防止泄漏文件夹(
因此您可以通过发送以下请求来绕过上述规则(您将收到.git
,.php
(只是“ .php”-没有文件名),.htaccess
,...) 。 (附带说明:我猜.htaccess文件和主Apache配置文件之间可能存在一些问题,您可以在其中禁止访问“ .ht”文件并允许执行“ .php”文件-这就是为什么这样的请求正在做自己的事情而没有被简单地重写为404错误。相反,他们返回了403错误)。403 Forbidden
错误:]http://example.com/include/.php
如果目录不存在,您可以验证是否会收到- →您会收到403错误
http://example.com/include/.ht- →您会收到403
错误http://example.com/include/.htaccess- →您会收到403
错误404 Not Found
错误:错误http://example.com/DOESNT-EXISTS/.ht→您会收到404 错误http://example.com/DOESNT-EXISTS/.htaccess→您会收到404 错误
可能的解决方法您需要匹配所有
dot-files
。因此,首先您禁止访问它们(403错误),然后将403错误重写为404错误。Options -Indexes RewriteEngine On RewriteRule ^secret.*$ - [R=404,L] RewriteRule ^404_error$ - [R=404,L] <FilesMatch "^\\."> order allow,deny # 403 error deny from all # Rewrite 403 error to 404 error # Error document must be: # - "a string with error text" OR # - an absolute path which starts with "/" OR # - URL (you'll get a redirect) ErrorDocument 403 /404_error </FilesMatch>
这些请求现在被阻止,并且您会收到404 Not Found
错误: