Apache .htaccess将根目录重写到文件夹,但阻止指向同一文件夹的直接URL

Apache .htaccess将根目录重写到文件夹,但阻止指向同一文件夹的直接URL,apache,.htaccess,mod-rewrite,redirect,Apache,.htaccess,Mod Rewrite,Redirect,我已经研究并尝试了一个星期来完成这项工作,但我还没有找到我的解决方案。我相信这是可能的,但我只是不是巫术深度方面的专家 设置: MantisBT的安装位于 mysite.com/mantisbt/currentver/mantis-1.3.19 执行升级时,我希望归档所有旧版本和旧版本 数据库转储到/mantisbt/oldversions/以保持整洁。 例如,我在不同的子目录中还有其他实用程序和页面 实例mysite.com/utils 目标是: 我希望用户键入mysite.com/root并

我已经研究并尝试了一个星期来完成这项工作,但我还没有找到我的解决方案。我相信这是可能的,但我只是不是巫术深度方面的专家

设置:

MantisBT的安装位于 mysite.com/mantisbt/currentver/mantis-1.3.19 执行升级时,我希望归档所有旧版本和旧版本 数据库转储到/mantisbt/oldversions/以保持整洁。 例如,我在不同的子目录中还有其他实用程序和页面 实例mysite.com/utils 目标是:

我希望用户键入mysite.com/root并重写URL 对/mantisbt/currentver/mantis-1.3.19/透明,以便 看不到我的目录结构,它看起来像是mantisbt应用程序 位于根目录中。 我还希望受到任何试图直接访问服务器的人的保护 以/mantis开头的子目录。例如,如果 有人直接键入mysite.com/mantisbt/currentver/mantis-1.3.19/ 在浏览器中,我希望它们重定向回根目录 所以他们像其他人一样从根目录访问站点。 我还需要允许我的其他子目录,如mysite.com/utils 如果我键入指向它们的完整路径,则可以访问它们。
我遇到的最大问题是,每次URL更改时,Apache都会再次遍历.htaccess文件。所以我陷入了重写循环。我试着研究Apache提供的每一种可能的工具,但在这里我的技术远远落后。我可以提供我尝试过的示例,它们显然不正确,但请询问我,我可以发布它们。

您最好通过位置指令更改httpd.conf中的DocumentRoot,以及utils目录中的映射。它将更加干净,Apache不必对每个请求都进行一些欺骗

不管怎么说,以下几点应该行得通

# Stop direct access
RewriteCond %{HTTP_REFERER} !mysite.com [NC]
RewriteRule /?mantisbt/currentver/mantis-1.3.19 / [NC,L,R=301]

# Internally Rewrite everything apart from /utils to /mantisbt/mantis-1.3.19/
RewriteCond %{HTTP_REFERER} !mysite.com [NC]
RewriteCond %{REQUEST_URI}  !/utils [NC]
RewriteRule .* /mantisbt/currentver/mantis-1.3.19%{REQUEST_URI} [L]

请分享一些代码,%{HTTP\u REFERER}检查是genius。我想知道是否有这样的事情存在。我会试试,然后再报告。只是好奇Apache是如何工作的。外部用户是否可能手工定制请求并欺骗%{HTTP_REFERER},从而伪造Apache,使其认为请求来自自身?是的,HTTP头是可黑客攻击的。感谢您的确认。我觉得为我的网站防范类似的事情有点太偏执了。但是,如果我真的想防止欺骗,我是否需要进入httpd.conf文件以实现我的目标?或者有没有其他安全的方法来检测.htaccess文件以前是否循环过一次?也许我已经达到了极限。htaccess就是在这方面。有六种方法可以让事情变得更安全,但都是易碎的。您可以通过重写规则,在第一次请求特定于应用程序的内容时设置cookie,然后在所有其他请求中坚持同时存在referer和cookie。