![Флаг mod_rewrite [L] не работает должным образом?](https://rvso.com/image/533839/%D0%A4%D0%BB%D0%B0%D0%B3%20mod_rewrite%20%5BL%5D%20%D0%BD%D0%B5%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82%20%D0%B4%D0%BE%D0%BB%D0%B6%D0%BD%D1%8B%D0%BC%20%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%BC%3F.png)
Я думал, что флаг [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
Если правило приводит к перенаправлению клиента, то оно снова попадет в список правил сверху, когда клиент сделает перенаправленный запрос.