Я думал, что флаг [L] указывает на то, что «это правило должно быть последним правилом, обработанным для этого http-запроса».
Однако когда у меня есть 2 правила, например:
RewriteRule ^test$ php/test.php [L]
RewriteRule (.*) error.php
Что всегда происходит, так это запросы наhttp://localhost/testперейдите к error.php,нетв test.php, как я и ожидал, так как я поставил [L] там. Если вы закомментируете второе правило там, то запросы наhttp://localhost/testперейдите к test.php, как и ожидалось.
На самом деле я пытаюсь поймать ошибки 404 с помощью mod_rewrite. Возможно, то, что я пытаюсь сделать, просто неправильно. Но я все еще хочу знать, почему правило catch-all активно, посколькуЯ сделалпоставьте [L] после ^test
правила.
Я вижу большой листинг вздесьгде администратор сервера перечисляет несколько путей, начинающихся с распознанных каталогов, но я хотел избежать этого, просто используя хорошее универсальное правило.
решение1
Если правило приводит к перенаправлению клиента, то оно снова попадет в список правил сверху, когда клиент сделает перенаправленный запрос.