如何将子文件夹设置为root并限制某些访问权限

时间:2012-11-20 14:01:00

标签: php apache .htaccess mod-rewrite root

我在主持人上阅读了一篇关于如何将子文件夹设置为我的域的根目录的文章,但它误导我相信请求将全部发送到/子文件夹/而不是根本发送到根目录,那是不是这样的。

我在root中的.htaccess中使用此代码,不幸的是,它没有按预期工作。

RewriteEngine on

RewriteCond %{HTTP_HOST} ^(www.)?domain.com$

RewriteCond %{REQUEST_URI} !^/subfolder/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ /subfolder/$1

RewriteCond %{HTTP_HOST} ^(www.)?domain.com$
RewriteRule ^(/)?$ subfolder/index.php [L]

我想要实现的目标如下:

  • root in / subfolder /
  • 对原始真实root的所有请求都被拒绝,就好像根本不存在一样。例如phpinfo.php,php.ini,/ subfolder /中的错误处理集拒绝访问的任何页面或杂项。任何对“domain.com/whateverhere”的请求绝对总是发送到/ subfolder /.
  • 如果可能,请限制任何访问domain.com/subfolder/以显示404的能力。我认为重定向同样有效。
  • 我目前在domain.com/resources/的root中使用/ resources /文件夹,其中包含脚本,css,图像等,即使重写已经到位,将/子文件夹/设置为root,对domain.com/resources/的请求仍然被接受,即使它不在/子文件夹/中。正如我之前所说,我想知道如何真正限制对真正root的访问,并强制所有请求到/ subfolder /.

总而言之,我希望将“root”完全设置为/ subfolder /,在实际的根中无法访问phpinfo.php和php.ini等重要文件,并且仍然使用真正的.htaccess像往常一样。

我知道我在这里问了很多,所以我道歉。

提前感谢任何可以提供帮助的人。

1 个答案:

答案 0 :(得分:0)

您可以在子文件夹中添加.htpasswd文件:

<强> htpasswd的

admin:$apr1$EvV5M50w$9IgAqskEg5r2pIIXUzQyp0

并在子文件夹/ .htaccess 文件中定义它,如下所示:

AuthUserFile /www/site/.htpasswd
AuthType Basic
AuthName "My secret place"
require valid-user

现在打开子文件夹,系统会向您询问密码和用户名(在我的示例中为 admin / admin )。

要将其设置为起始文件夹,您只需添加

即可
<?php header( 'Location: /subfolder/' ); die; ?>

位于index.php文件的最顶层,因此它始终会将您重定向到子文件夹。