Флаг [L]
означает «Последний», т. Е. Когда это правило соответствует, это последнее проверенное правило перезаписи.Вам нужен способ различать два типа перенаправлений.Вот два способа сделать это:
(1) Поставить тире во всех именах ваших сообщений, но не в категориях, поэтому оба приведенных вами примера работают так, как указано:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^-]+)$ cats.php?cat_label=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ post.php?id_name=$1 [L,QSA]
(2) Добавьте каталог для категорий, чтобы не происходило никаких магических действий, которые могут привести к ошибкам. Вы уже сталкивались с такой возможностью выше.Вот как это будет выглядеть:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cats/(.*)$ cats.php?cat_label=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ post.php?id_name=$1 [L,QSA]
В обоих случаях мы сначала сопоставляем более конкретные версии, помечая их как [L]
ast.Тогда у нас есть широкая, запоминающаяся в конце.