【问题标题】:.htaccess to exclude folder.htaccess 排除文件夹
【发布时间】:2013-07-17 07:40:27
【问题描述】:

我的根文件夹确实有以下 .htaccess:

Options -Indexes
Options +FollowSymLinks
<IfModule mod_rewrite.c>
    RewriteEngine On


    RewriteCond %{HTTP_HOST} ^yourdomain.com [NC]
    RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [L,R=301] 


    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule .* loader.php [L,QSA]



</IfModule>

我想从 RewriteRule 的规则中排除 siteadmin 的文件夹。* loader.php [L,QSA] 在根文件夹

在子文件夹内:“siteadmin”我确实有另一个像这样的 .htaccess 文件:

AuthType Basic
AuthName "siteadmin"
AuthUserFile "/home/user1/.htpasswds/public_html/siteadmin/passwd"
require valid-user

loader.php(在根目录):

<?php
//die('Only enable this script if you dont have support for MultiViews');
$relative = '';
$loaders  = array(
    'ajax' => 1,
    'album' => 1,
    'albums' => 1,
    'blog' => 1,
    'blogs' => 1,
    'captcha' => 1,
    'categories' => 1,
    'community' => 1,
    'confirm' => 1,
    'error' => 1,
    'feedback' => 1,
    'feeds' => 1,
    'game' => 1,
    'games' => 1,
    'index' => 1,
    'invite' => 1,
    'loader' => 1,
    'login' => 1,
    'logout' => 1,
    'lost' => 1,
    'mail' => 1,
    'notice' => 1,
    'notices' => 1,
    'photo' => 1,
    'requests' => 1,
    'search' => 1,
    'signup' => 1,
    'static' => 1,
    'stream' => 1,
    'upload' => 1,
    'user' => 1,
    'users' => 1,
    'video' => 1,
    'videos' => 1,
    'edit' => 1
);

$query      = ( isset($_SERVER['QUERY_STRING']) ) ? $_SERVER['QUERY_STRING'] : NULL;
$request    = str_replace($relative, '', $_SERVER['REQUEST_URI']);
$request    = str_replace('?' .$query, '', $request);
$request    = explode('/', trim($request, '/'));
if (isset($request['0'])) {
    $page   = $request['0'];
    if (isset($loaders[$page])) {
        require $page. '.php';
    } else {
        header('HTTP/1.0 404 Not Found');
        die();
    }
} else {
    header('HTTP/1.0 404 Not Found');
    die();
}
?>

当我访问像http://www.domain.com/signup 这样的网站时,loader.php 会起作用 它将加载 signup.php

站点管理员仍然无法使用密码保护。无论如何我可以从 loader.php 规则中排除文件夹 siteadmin 吗?

【问题讨论】:

  • 如果siteadmin 是一个真正的文件夹,那么拥有RewriteCond %{REQUEST_FILENAME} !-d 已经跳过了loader.php 规则。

标签: apache .htaccess


【解决方案1】:

试试这个代码:

Options -Indexes
Options +FollowSymLinks

RewriteEngine On
RewriteCond %{HTTP_HOST} ^yourdomain.com [NC]
RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/siteadmin/?
RewriteRule ^(.*)$ loader.php [L,QSA]

【讨论】:

  • 这不起作用,如果我打开站点管理员,密码保护不会加载。我在访问 siteadmin 文件夹时看到 404
  • 好的。一个问题: loader.php 和 .htaccess 文件在根文件夹吗?
  • 还有.htaccess 文件和siteadmin 文件夹?
  • 我在根目录和 siteadmin 文件夹中有 .htaccess 文件
  • 同样没有运气。或者,如果您可以保护子文件夹免受根目录的 .htaccess 的影响,这可能吗?而不是我们在 siteadmin 文件夹中放置一个 .htaccess。
【解决方案2】:

通常建议使用数据库来存储用户的登录信息,尤其是随着用户成员的增长。

要从上面指定的重定向中排除 siteadmin,您不必担心。代码有这些条件

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* loader.php [L,QSA]

第一行说如果请求指向一个实际的文件,重定向应该被忽略;第二行说如果请求指向一个实际的目录,重定向也应该被忽略。
这意味着无论何时请求文件或目录(包括站点管理员),重定向都会被忽略。这解决了您的第一个问题

对于第二个问题(文件夹密码保护),需要验证mod_auth模块是否开启。
将这样的内容放入 siteadmin 文件夹中的 .htaccess 文件中。

<IfModule mod_auth.c> AuthType Basic AuthName "siteadmin" AuthUserFile "/home/user1/.htpasswds/public_html/siteadmin/passwd" require valid-user </IfModule>



希望这会有所帮助。

【讨论】:

  • 我们把这个放在哪里: AuthType Basic AuthName "siteadmin" AuthUserFile "/home/user1/.htpasswds/public_html/siteadmin/passwd" 需要有效用户 在根 .htaccess 或 siteadmin 文件夹的 .htaccess 内?
猜你喜欢
  • 2023-04-03
  • 2012-11-30
  • 2015-12-11
  • 2013-10-27
  • 2010-12-15
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多