В htaccess, как применить FilesMatch только к файлам в корне сайта

Я уже ответил на этот вопрос, но я сделаю это снова, так как между тем я узнал, что есть особые случаи, если вы работаете в CLI (перенаправления не могут произойти и, следовательно, не должны exit() ), или если ваш веб-сервер работает с PHP как (F) CGI (для правильной переадресации требуется предварительно установленный заголовок Status).

function Redirect($url, $code = 302)
{
    if (strncmp('cli', PHP_SAPI, 3) !== 0)
    {
        if (headers_sent() !== true)
        {
            if (strlen(session_id()) > 0) // if using sessions
            {
                session_regenerate_id(true); // avoids session fixation attacks
                session_write_close(); // avoids having sessions lock other requests
            }

            if (strncmp('cgi', PHP_SAPI, 3) === 0)
            {
                header(sprintf('Status: %03u', $code), true, $code);
            }

            header('Location: ' . $url, true, (preg_match('~^30[1237]$~', $code) > 0) ? $code : 302);
        }

        exit();
    }
}

Я также рассмотрел вопрос о поддержке различных Коды перенаправления HTTP (301, 302, 303 и 307), как это было описано в комментариях к моему предыдущему ответу, вот описания:

  • 301 - Перемещено на постоянной основе
  • 302 - Найдено
  • 303 - См. Other
  • 307 - Временное перенаправление (HTTP / 1.1)
2
задан aaaaaa123456789 4 March 2019 в 06:25
поделиться

1 ответ

Вы можете использовать SetEnvIf против URI только формы root, как это:

SetEnvIf Request_URI "^/?(login|reset|raport)\.php" PASS
AuthUserFile /home/myaccount/public_html/.htpasswd
AuthType Basic
AuthName "Restricted area"
Order Deny,Allow
Deny from all
Satisfy any
Require valid-user
Allow from env=!PASS

Итак, форма здесь SetEnvIf Request_URI "^/?(login|reset|raport)\.php вы убедитесь, что URI начинается с login|reset|raport только подкаталог.

0
ответ дан Mohammed Elhag 4 March 2019 в 06:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: