我的根文件夹确实有以下.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。* loader.php [L,QSA]规则中排除siteadmin的文件夹
在子文件夹中:“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
siteadmin仍然无法使用密码保护。无论如何我可以从loader.php规则中排除文件夹siteadmin吗?
答案 0 :(得分:0)
试试这段代码:
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]
答案 1 :(得分:0)
通常建议使用数据库来存储用户的登录信息,尤其是在用户成员数量增加时。
要从上面指定的重定向中排除 siteadmin ,您无需担心这一点。代码具有这些条件
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* loader.php [L,QSA]
第一行表示如果请求指向实际文件,则应忽略重定向;第二行表示如果请求指向实际目录,则也应忽略重定向。
这意味着无论何时请求文件或目录(包括siteadmin),都将忽略重定向。这解决了你的第一个问题
对于第二个问题(保护文件夹的密码),您需要验证是否已启用 mod_auth 模块。
把这样的东西放到siteadmin文件夹中的.htaccess文件中。
<IfModule mod_auth.c>
AuthType Basic
AuthName "siteadmin"
AuthUserFile "/home/user1/.htpasswds/public_html/siteadmin/passwd"
require valid-user
</IfModule>
希望这会有所帮助。