Проблема не в L
, а в вашем правиле RewriteRule ^.*?([^/]+)$ index.php?action=details&id=$1 [L,QSA]
.
Пойманный шаблон ^.*?([^/]+)$
в вашем правиле сопоставляет все переписанные URI и переписывает их в /index.php?action=details&id
.
Что происходит, когда вы переходите к:
/foobar/items/2/remove
следующее правило соответствует
RewriteRule ^.*?([^/]*)/items/([^/]*)/remove/$ deleteitem.php?id=$2 [L,QSA]
Затем, чтобы загрузить целевой URL /deleteitem.php?I'd=124
вашсервер снова читает ваш файл htaccess, и следующие правила соответствуют
RewriteRule ^.*?([^/]+)$ index.php?action=details&id=$1 [L,QSA]
Сервер продолжает чтение файла htaccess, пока не найдены соответствующие правила.
Чтобы решить эту проблему, вы можете использовать END
flagвместо L
замените L
на END
в каждом правиле.Флаг END
гарантирует, что правило запускается только в текущем цикле перезаписи или помещает RewriteConds над правилом, чтобы оно не перезаписывало существующие файлы или URI.
RewriteCond %{REQUEST_FILENAME} !-f