Миграция правила заголовка авторизации Apache на Lighttpd
Мой веб-сервер работает с приложениями PHP с lighttpd и PHP-FPM в течение многих лет. Теперь, после обновления программного обеспечения сторонних производителей, я должен включить некоторые правила для активации REST API.
<IfModule mod_setenvif.c>
SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
</IfModule>
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /api/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule>
Я хотел бы понять, что он делает, и переписать его на основе конфигурации lighttpd, если он имеет поддержку.
2 ответа
Установка переменной среды HTTP_AUTHORIZATION ("CGI") должна происходить как часть настройки CGI (заголовки передаются как HTTP_...
), и lighttpd НЕ исключает заголовок "Авторизация" из этого, так что здесь ничего не нужно делать в lighttpd.
Конфигурация перезаписи переписывает все запросы, не нацеленные на статические файлы или каталоги в /api/
субтрасса. Ближайший в lighttpd (1.4.24+
) без использования mod_magnet
было бы:
url.rewrite-if-not-file = ( "^/api/" => "/api/index.php" )
Это также сработает для каталогов (только обычные файлы не перезаписываются), но я думаю, что маловероятно, что вам на самом деле нужны перехваты в пределах /api/
путь, так что это, вероятно, хорошо.
Я хотел бы понять, что он делает
Устанавливает переменную среды с именем
HTTP_AUTHORIZATION
к стоимостиAuthorization
Заголовок HTTP-запроса (если есть). Это может быть необязательно в конфигурации вашего сервера. PHP должен установить это автоматически, однако, в зависимости от того, как PHP установлен на некоторых конфигурациях Apache, этого не происходит - отсюда и этот фрагмент кода. (Обратите внимание, что приведенный выше код пытается установить это двумя различными способами - но чистый результат "почти" одинаков.)Фронт-контроллер - все запросы, которые не отображаются в существующие файлы (или каталоги), внутренне переписываются в
/api/index.php
, Это стандартный "шаблон фронт-контроллера".
Так что, по сути, приведенный выше код является просто стандартным фронт-контроллером, который направляет все запросы /api/index.php
,
и переписать его на основе конфигурации lighttpd
К сожалению, я не говорю на lighttpd, но Google lighttpd front controller
подтягивает некоторые возможности. Например, с этой страницы, если включены необходимые модули, они предлагают вам сделать что-то вроде:
url.rewrite-once = ( "^/(.*)\.(.*)" => "$0", "^/([^.]+)$" => "/index.php", "^/$" => "/index.php" )
Хотя это не похоже на то, что фактически проверяет наличие запрошенного файла, а скорее предполагает, что запросы на файлы будут иметь расширение файла (моя интерпретация).