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

How to configure <location> Директива, относящаяся к местоположению / каталогу на сервере Apache, а не на уровне сервера?</location>


Мой текущий файл "httpd.conf". (Содержит только важные части)

ServerRoot "/etc/httpd"
Listen 80
ServerAdmin root@localhost
ServerName 127.0.0.1

<Directory />
    AllowOverride none
    Require all denied
</Directory>

DocumentRoot "/var/www/html"

<Directory "/var/www">
    AllowOverride None
    Require all granted
</Directory>


<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

<Location />
    AuthType shibboleth
    ShibRequireSession On
    Require valid-user
</Location>

<VirtualHost *:80>
    ServerAdmin webmaster@myweb.com
    DocumentRoot "/var/www/html/mywebsitecontent/"
    ServerName myweb
</VirtualHost>

Проблема:


Что я пробовал:


В соответствии с https://httpd.apache.org/docs/2.4/mod/core.html#location

<Location> sections operate completely outside the filesystem. This
has several consequences. Most importantly, <Location> directives
should not be used to control access to filesystem locations. Since
several different URLs may map to the same filesystem location, such
access controls may by circumvented.

Я думаю, вам нужно что-то ближе к этому:

<Directory "/var/www/html/myweb/">
    AuthType shibboleth
    ShibRequireSession On
    Require valid-user
</Directory>
<VirtualHost *:80>
    ServerAdmin webmaster@myweb.com
    DocumentRoot "/var/www/html/mywebsitecontent/"
    ServerName myweb
</VirtualHost>

edit: Я думаю, вы хотите добавить еще один конкретный VirtualHost для демонстрационного сайта.

<VirtualHost *:80>
    ServerAdmin webmaster@myweb.com
    DocumentRoot "/var/www/html/demo/"
    ServerName demo
</VirtualHost>
<VirtualHost *:80>
    <Directory "/var/www/html/myweb/">
        AuthType shibboleth
        ShibRequireSession On
        Require valid-user
    </Directory>
    ServerAdmin webmaster@myweb.com
    DocumentRoot "/var/www/html/mywebsitecontent/"
    ServerName myweb
</VirtualHost>

Обратите внимание, что VirtualHost по умолчанию находится вверху. Итак, если вы заходите на сайт с http://127.0.0.1/ (обратите внимание, что ServerName будет 127.0.0.1, а не demo, не myweb) вы получите первый.

http://myweb/demo/ является подпапкой http://myweb/ Так что ваши <Location /> покрывает это.

Вам нужно поставить <Location /> немного внутри VirtualHost блок с ServerName myweb. Находясь вне любого VirtualHost означает, что он действует для всего вашего сервера Apache.