Я использую Apache для реализации единого входа Shibboleth для сайта Laravel. Я хотел бы обойти одно определенное c подмножество URL-адресов из аутентификации (api/public
, например), чтобы они были общедоступными. По какой-то причине файл .htaccess
папки publi c, похоже, мешает этому работать должным образом.
Я пробовал это кучей разных способов, и все дороги привели к этой же проблеме. Вот что я сейчас пытаюсь.
<Directory /var/www/html/mysite/public>
SSLOptions +StdEnvVars
Options Indexes FollowSymLinks MultiViews
AllowOverride All
<If "%{REQUEST_URI} =~ m#api/public#">
Require all granted
</If>
<Else>
AuthType shibboleth
ShibRequestSetting requireSession 1
Require valid-user
</Else>
</Directory>
Вот файл .htaccess
, который Laravel поставляется с:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
К сожалению, при наличии файла .htaccess
код Else
все еще выполняется и код Шиба работает. Но я почти уверен, что условие If
улавливается, потому что, если ввести Require all denied
в качестве теста, то он запретит, как и ожидалось.
Однако, если я удалю .htaccess
, это сработает! Но это также означает, что любая маршрутизация внутри Laravel теперь нарушена, что мне действительно нужно для этого URL-адреса publi c.
Я предполагаю, что .htaccess
RewriteRule
вызывает выполнение кода Else
даже после перехвата оператора If
. Любые предложения по решению этой проблемы? Возникла та же проблема с использованием директивы Location
.
Спасибо.