我的目标是降低我应用程序签名的可见性。这并非默默无闻,而仅仅是深度防御的浅薄表现,因此乍一看攻击者无法判断它是否为静态站点。 (也是美容;即使在正常操作中它们永远不会变得可见,它只是觉得“更清洁”以隐藏应用细节)。因此,我想拒绝访问某些目录而不透露它们存在,因此如果用户请求不存在的页面,我必须给出与应用程序相同的404响应。mod_rewrite强制内部重定向
在.htaccess
文件,我有以下几点:
RewriteEngine on
RewriteCond "%{REQUEST_FILENAME}" "!-f"
RewriteCond "%{REQUEST_FILENAME}" "!-d"
RewriteRule "^(.*)" "index.php?page=$1"
RewriteRule "^(secret_dir1|secret_dir2)(/.*)?$" "index.php?page=404"
其中index.php
根据“网页”的值呈现一个好的漂亮的网页GET参数;如果“页面”与应用程序级别的页面不对应,或者“页面”设置为404,则该脚本将呈现具有适当标题和所有内容的漂亮404页面。
这是问题发生的地方。 “应用程序级”404s按预期工作;一个404页面被渲染。但是,如果用户请求mydomain.com/dir_i_am_trying_to_hide
,他们会得到301重定向到mydomain.com/dir_i_am_trying_to_hide/?page=404
:外部重定向而不是内部重写。
它为什么发出一个外部重定向而不是只重写url?我该如何正确地避免这种情况?除此之外,是否有强制服务器执行内部重写的方法? (Apache的文档似乎表明你可以强制重写规则是外部的,但不是相反的方式)
要清楚,'^ dir_i_am_trying_to_hide'不是真正的正则表达式:D – dn3s
这些规则不应该导致301.也许你的index.php里面有一些东西在做它? –
我无法想象什么。我只在整个应用程序中调用了header()函数,这是'header(“$ {_ SERVER [”SERVER_PROTOCOL“]} 404 Not Found”);'在呈现404页面之前。 – dn3s