htaccess - авторизация на Laravel, исключая публичный каталог - PullRequest
0 голосов
/ 03 октября 2018

В настоящее время я размещаю сайт на сервере Linux без доступа к корневой системе.Я могу изменять только файлы .htaccess в своей выделенной директории.

Фон

В основном мне необходимо использовать AuthType CAS в моем приложении.Запрос на файл, защищенный этим, будет перенаправлен на сервер аутентификации чужого домена, а затем обратно на сайт, если вход был успешным. История моей проблемы в том, что мне нужно было иметь дело с CORS при запросе ресурсов в Chrome.

  • Я размещаю на app.x.com.
  • Сервер аутентификации включен cas.x.com
  • Запрос app.x.com/resource перенаправляется на cas.x.com/cas/login_service?http%3a%2f%2fapp.x.com%2fresource, а затем обратно.

Не удается загрузить шрифтыНапример, шрифт Awesome в Chrome, потому что запрошенный URL-адрес находится на cas.x.com, где у меня нет контроля, и у него нет заголовка, разрешающего мой домен в качестве источника.(TBH, я не понимаю, почему браузеры реализованы таким образом, потому что CSS загружался нормально из моего домена, но шрифты, загруженные из CSS, стали запросами к серверу CAS, но я отвлекся.)


Итак, я хотел пройти аутентификацию только для файла index.php Laravel.При наличии следующего файла .htaccess:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

<FilesMatch "index.php">
    AuthType CAS
    CASAuthNHeader On
    Require valid-user
</FilesMatch>

Но затем перенаправление показывает ошибку, и этот подход не выполняется из-за неправильного перенаправления:

Это показывает 404, потому что у меня нет этого пути, проложенного в Laravel.

Без раздела FilesMatch перенаправление будет выглядеть следующим образом: http://cas.x.com/cas/login_service?http%3a%2f%2fapp.x.com%2finternal%2fmarketplace

Как применить Auth только к index.php или применить ко всему сайту, но исключая каталоги и файлывнутри public/?

...