htaccess - определяет mod_php - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь ограничить / устранить дублирование.

Согласно моему (ограниченному) пониманию некоторых LAMP хостинг-провайдеров (особенно на общих серверах), существуют некоторые директивы PHP-iniигнорируются при установке внутри PHP-скрипта, но принимаются при установке в .htaccess;процесс должен быть довольно простым:

  • обнаружить любой mod_php* и установить переменную среды, если она найдена
  • проверить эту переменную среды и установить все директивы php_value ONCE
  • перенаправить все запросы в PHP для обработки запросов в соответствии с config

Цель состоит в том, чтобы удерживать весь контент, если только PHP не доступен для обработки запроса в соответствии с config - для каждого пользователя / бот /API / и т.д....и этим, очевидно, не использовать какой-либо PHP-код в качестве текста. O_o

Я понятия не имею, почему это должно быть более сложным, но я отказываюсь признать, что мне приходится дублировать (длинный) списокphp_value директив 4 раза - только потому, что Apache-conf слишком (объяснительно удален) для обработки простейших логических условий ... (лицо) ... или, может быть, я просто недостаточно знаю об Apache-conf, пожалуйстаПомогите;код ниже выдает ошибку 400 , и я не могу заставить ее работать, пока я не продублирую каждый блок для каждой php-версии и собственный суффикс mod_php * каждого хост-провайдера -for PHP-version-hot-

Вот что [bl / thr] должно:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    <IfModule mod_php_null.c>
        SetEnv MODPHP 1
    </IfModule>
    <IfModule mod_php5.c>
        SetEnv MODPHP 1
    </IfModule>
    <IfModule mod_php7.c>
        SetEnv MODPHP 1
    </IfModule>

    <If "%{ENV:MODPHP} =1">
        php_value expose_php          Off
        php_value short_open_tag      On
        php_value display_errors      On
        php_value max_execution_time  60
        php_value default_charset     UTF-8
        # list shortened for brevity

        RewriteCond %{DOCUMENT_ROOT}/.auto.php -f
        RewriteRule ^(.*)$ .auto.php [L]
    </If>
</IfModule>

1 Ответ

0 голосов
/ 19 сентября 2018

Код ниже работает, однако;обратите внимание, что:

  • <IfModule mod_authz_core.c> используется для проверки Apache2.4 - для <If>
  • RewriteRule используется для определения переменной
  • REDIRECT_ (условно) имеет префикс к имени переменной
  • RewriteCond %{ENV:MODPHP} ^1$ используется для проверки, является ли переменная 1.

<IfModule mod_rewrite.c>
    <IfModule mod_authz_core.c>
        RewriteEngine On
        RewriteBase /

        <IfModule mod_php_null.c>
            RewriteRule .* - [E=MODPHP:1]
        </IfModule>
        <IfModule mod_php5.c>
            RewriteRule .* - [E=MODPHP:1]
        </IfModule>
        <IfModule mod_php7.c>
            RewriteRule .* - [E=MODPHP:1]
        </IfModule>

        <If "%{ENV:REDIRECT_MODPHP} =1">
            php_value expose_php          Off
            php_value short_open_tag      On
            php_value display_errors      On
            php_value max_execution_time  60
            php_value default_charset     UTF-8
        </If>

        RewriteCond %{ENV:MODPHP} ^1$
        RewriteCond %{DOCUMENT_ROOT}/.auto.php -f
        RewriteRule ^(.*)$ .auto.php [L]
    </IfModule>
</IfModule>
...