В моем /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
Итак, могу ли я добиться этого: когда я перехожу на: www.websitename.com/data/, он должен выдать ошибку 404. А когда делать www.websitename.com/data/welcome.php, он должен работать.
Вы можете просто переписать каждый запрос на статус 404 not found, за исключением 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
Прежде всего, файлы .htaccess предназначены для того, чтобы иметь эффект в каталоге, в котором они размещены, поэтому вместо одного в / var / www / обычно у вас будет два: по одному в каждом из / var / www / impdata / и / var / www / data /
Или, скорее, вообще не иметь файлов .htaccess: моя любимая мозоль, цитата из руководство по .htaccess файлы:
Вам следует полностью избегать использования файлов .htaccess если у вас есть доступ к файлу конфигурации главного сервера httpd. Использование файлов .htaccess замедляет работу вашего http-сервера Apache. Любую директиву, которую вы можете включить в файл .htaccess, лучше установить в блоке Directory, так как это будет иметь тот же эффект с лучшей производительностью.
Если я правильно прочитал ваш вопрос, при использовании 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>