Пользователь вводит мой сайт и приходит на главную страницу, он / она должен всегда и только на домашней странице. Все остальные файлы – это скрипты, которые запускаются на домашней странице, но пользователь не должен переходить к ним. Итак, вот мой макет каталога:
Они прибудут на Front.php и должны всегда оставаться на фронте. Поэтому я создал файл htaccess, который имеет этот код:
DirectoryIndex Front.php index.html AuthType Basic AuthName "Login" AuthUserFile /disks/*/*/*/.htpasswd Require valid-user
Прямо сейчас, ВСЕ требует аутентификации. Но я хочу, чтобы все, кроме Front.php, требовало аутентификации. Как я могу исключить Front.php из проверки подлинности?
Кроме того, будет ли эта аутентификация предотвращать запуск скриптов или просто запретить пользователю переходить к файлу с помощью URL-адреса?
Прямо сейчас, ВСЕ требует аутентификации. Но я хочу, чтобы все, кроме Front.php, требовало аутентификации. Как я могу исключить Front.php из проверки подлинности?
Пытаться:
SetEnvIfNoCase Request_URI ^/Front.php norequire_auth=true # Auth stuff AuthType Basic AuthName "Login" AuthUserFile /disks/*/*/*/.htpasswd # Setup a deny/allow Order Deny,Allow # Deny from everyone Deny from all # except if either of these are satisfied Satisfy any # 1. a valid authenticated user Require valid-user # or 2. the "require_auth" var is set Allow from env=norequire_auth
Это использует директиву Satisfy
и устанавливает ее в any
, что означает либо Require valid-user
либо Allow
достаточно. Переменная norequire_auth
только тогда, когда URI является /Front.php
. Вы можете добавить дополнительные белые списки URI, если хотите, включая дополнительные директивы SetEnvIfNoCase
.
Кроме того, будет ли эта аутентификация предотвращать запуск скриптов или просто запретить пользователю переходить к файлу с помощью URL-адреса?
Это не будет препятствовать запуску скриптов, если вы включите их через include
или require
. Но если вы напрямую Front.php
на них с HTML-содержимого Front.php
, появится диалоговое окно входа в Front.php.
Вы говорите, что не хотите вводить другие скрипты, но вы добавляете к нему аутентификацию.
Если вы не хотите выполнять эти сценарии напрямую, лучше вывести их из папки public_html, чтобы они не могли быть доступны извне. Вы все равно сможете включить / потребовать их в front.php.
Сценарии администратора можно легко перенести в подкаталог, в который вы можете добавить аутентификацию из .htaccess. Если вы хотите добавить аутентификацию в некоторые файлы, но не все, вы также можете отправить необходимые заголовки из PHP-скриптов.
Вы часто видите такую проверку в начале файла:
defined('MYAPPDEFINE') || die('No direct access allowed');
На странице входа (index.php, front.php, что угодно) вы можете добавить эту строку:
define('MYAPPDEFINE', 'Whatever value');
Таким образом, каждый файл, который вызывается непосредственно, будет умирать и немедленно завершаться, но когда он включен из front.php, проверка завершается успешно, и файл включен.
Используйте этот набор правил:
<Filesmatch "^((?!Front\.php).)*$"> AuthType Basic AuthName "Login" AuthUserFile /disks/*/*/*/.htpasswd Require valid-user </Filesmatch> <Files "Front.php"> allow from all </Files>
Используйте этот контент .htaccess, чтобы люди не запрашивали ничего, кроме front.php:
RewriteEngine On RewriteCond %{THE_REQUEST} !front.php [NC] RewriteRule .* - [F,L]
Теперь доступен только fron.php для всех, кто обращается к вашему apache.
BTW – насколько я знаю, вы можете заставить Apache аутентифицировать что-либо в конкретном каталоге, но не отдельные файлы.