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

Использование htaccess для предоставления доступа к файлу индекса, когда пользователь запрашивает URL-адрес каталога

Я хотел бы использовать htaccess, чтобы разрешить доступ к индексному файлу и нескольким другим файлам в каталоге (index.php), но для всего остального в каталоге требуется пользователь / пароль. Прямо сейчас у меня есть:

AuthName "SomeServer"
AuthUserFile /path/to/.htpasswd
AuthGroupFile /dev/null
Require valid-user
AuthType Basic
<FilesMatch "(index.php)|(login.php)">
    Allow from all
    Satisfy any
</FilesMatch>

Это позволяет пользователям получать доступ к index.php и login.php и запрещает остальную часть каталога. Однако всякий раз, когда пользователь запрашивает каталог без index.php в URL-адресе, например:

http://www.example.com/dir

Пользователю предлагается войти в систему. Однако, если пользователь идет сюда:

http://www.example.com/dir/index.php

Затем index.php отображается без приглашения на вход.

Что мне нужно изменить, чтобы пользователь мог перейти к http://www.example.com/dir и быть направленным к http://www.example.com/dir/index.php без запроса входа в систему, при этом требуя входа в систему для чего-либо еще в каталоге?

Обновление: не уверен, что это важно, но я переключил аутентификацию на использование mod_auth_mysql. Все еще использую тот же раздел моего файла htaccess и все еще сталкиваюсь с той же проблемой.

Вы можете попробовать что-то вроде следующего

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /vhosts/default

    DirectoryIndex index.php

    <Directory /vhosts/default>
        Options -Indexes
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

    <Location ~ ^/dir/(index|login)\.php$>
        Allow from all
        Satisfy any
    </Location>

    <Location ~ ^/dir/?$>
        Allow from all
        Satisfy any
    </Location>
</VirtualHost>

Сделайте несколько основных тестов

# curl -I http://localhost/
HTTP/1.1 401 Authorization Required
Date: Fri, 19 Feb 2016 10:03:38 GMT
Server: Apache/2.2.15 (CentOS)
WWW-Authenticate: Basic realm="SomeServer"
Content-Type: text/html; charset=iso-8859-1

# curl -I http://localhost/index.php
HTTP/1.1 401 Authorization Required
Date: Fri, 19 Feb 2016 10:03:43 GMT
Server: Apache/2.2.15 (CentOS)
WWW-Authenticate: Basic realm="SomeServer"
Content-Type: text/html; charset=iso-8859-1


# curl -I http://localhost/dir/index.php
HTTP/1.1 200 OK
Date: Fri, 19 Feb 2016 10:03:49 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.6.16
Content-Type: text/html; charset=UTF-8


# curl -I http://localhost/dir/
HTTP/1.1 200 OK
Date: Fri, 19 Feb 2016 10:03:52 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.6.16
Content-Type: text/html; charset=UTF-8


# curl -I http://localhost/dir/some_file.php
HTTP/1.1 401 Authorization Required
Date: Fri, 19 Feb 2016 10:04:07 GMT
Server: Apache/2.2.15 (CentOS)
WWW-Authenticate: Basic realm="SomeServer"
Content-Type: text/html; charset=iso-8859-1

# curl -I http://localhost/dir
HTTP/1.1 301 Moved Permanently
Date: Fri, 19 Feb 2016 10:04:14 GMT
Server: Apache/2.2.15 (CentOS)
Location: http://localhost/dir/
Content-Type: text/html; charset=iso-8859-1