Назад | Перейти на главную страницу

Как использовать .htaccess и .htpasswd для выборочного перенаправления и паролей

В моем /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>