在我的/var/www/
目录中,我有许多目录,例如:
/var/www/impdata/
/var/www/data/
那么我可以实现这个吗:
当我去:www.websitename.com/data/
它应该给出一个404
错误。
当我这样做时www.websitename.com/data/welcome.php
它应该有效。
当我这样做时,www.websitename.com/impdata/
它应该要求输入用户名和密码。
当我这样做时www.websitename.com/impdata/welcome.php
它应该有效。
那么我该如何编写.htaccess
并.htpasswd
实现这一目标?
这是我当前的.htaccess
文件,它位于/var/www/
目录中:
Options -Indexes
DirectoryIndex disabled
<Directory /var/www/impdata>
# All access controls and authentication are disabled
Satisfy Any
Allow from all
</Directory>
我当前目录.htpasswd
中的文件/var/www/impdata/
:
try:XYZXYZXYZXYZ
答案1
首先,.htaccess 文件旨在在放置它们的目录中生效,因此,通常不会在 /var/www/ 中有一个,而是在 /var/www/impdata/ 和 /var/www/data/ 中各有一个。
或者根本没有 .htaccess 文件:这是我最讨厌的事情,引自.htaccess 手册文件:
你应该完全避免使用 .htaccess 文件如果您有权访问 httpd 主服务器配置文件。使用 .htaccess 文件会降低 Apache http 服务器的速度。最好将 .htaccess 文件中包含的任何指令设置在目录块中,因为它将具有相同的效果且性能更好。
如果我正确理解了你的问题,当使用 www.example.com/data/ 时,你不想看到 index.html 或类似文件(如果存在),也不想看到文件列表,但是当从该目录请求特定文件时,你想允许用户访问该文件。
<Directory /var/www/data>
Options -Indexes
DirectoryIndex disabled
</Directory>
使用相同的选项向 /var/www/impdata 添加身份验证:
<Directory /var/www/impdata>
Options -Indexes
DirectoryIndex disabled
AuthType Basic
AuthName "RESTRICTED AREA"
AuthUserFile /var/www/impdata/.htpasswd
Require valid-user
</Directory>
您可以禁止该密码保护区域内的某些文件或目录需要使用Satisfy Any
指示:
<File /var/www/impdata/welcome.php>
# All access controls and authentication are disabled
Satisfy Any
Allow from all
</File>
答案2
那么我可以实现这个吗:当我访问 www.websitename.com/data/ 时,它应该会出现 404 错误。而当我访问 www.websitename.com/data/welcome.php 时,它应该可以正常工作。
您可以简单地将每个请求重写为 404 未找到状态,但 welcome.php 除外。在下面的代码中,您将看到每个规则都被重写为 404 状态,但 welcome.php 除外。
#.htaccess file of /var/www/data
RewriteEngine On
#Condition is that the requested URI is NOT data/welcome.php
RewriteCond ${REQUEST_URI} !^data/welcome.php$
#Return 404 by default
RewriteRule ^(.*)$ - [R=404,L]
当访问 www.websitename.com/impdata/ 时,它应该要求输入用户名和密码。当访问 www.websitename.com/impdata/welcome.php 时,它应该可以工作。
据我所知,.htaccess 文件是每个目录的,因此身份验证也是如此。但是,您可以做的是将所有不等于 welcome.php 的请求重定向到 php 脚本,然后该脚本发送身份验证请求。或者创建一个单独的目录,一个包含受保护的文件,一个不包含受保护的文件,然后重定向到这些特定目录。以下是 /impdata 不受保护但 /impdata/auth 受保护的示例。在这种情况下,/var/www/impdata/auth 包含 .htaccess 和 .htpasswd 要求,而 /var/www/impdata/ 包含处理重定向的文件。
#.htaccess of /var/www/impdata
RewriteEngine On
#Exception, if welcome.php is called, show it
RewriteCond %{REQUEST_URI} !^/impdata/welcome.php$
#Make sure the path does not already exist out
#of /impdata/auth/ as it would cause a redirect loop.
RewriteCond %{REQUEST_URI} !^/impdata/auth/(.*)$
RewriteRule ^(.*)$ auth/$1 [L]
#.htaccess file of /var/www/impdata/auth
Options -Indexes
AuthType Basic
AuthName "RESTRICTED AREA"
AuthUserFile /var/www/impdata/.htpasswd
Require valid-user