Если я правильно понимаю вопрос, то вам нужно укрепить регулярные выражения так, чтобы они соответствовали только тем шаблонам, которые вам действительно нужны - на данный момент они слишком мягки для ваших нужд.
Дляпример:
RewriteRule ^([^/]+)$ $1.php
Это будет соответствовать любому без косой черты, тогда как если вы хотите ограничить его, чтобы соответствовать только, скажем, вещи без косой черты и состоять из буквенно-цифровых символов,тогда вы могли бы сделать это:
RewriteRule ^([a-zA-Z0-9]+)$ $1.php
(Вы можете добиться того же эффекта для некоторых расширений только с помощью косвенного утверждения, но это усложняет ваше регулярное выражение. Я чувствую, что это, вероятно, разумнее(и проще для ума) подумать о шаблонах, которые вы действительно хотите подобрать, и затем выразить их заранее.)
Аналогично, ваш последний пример:
RewriteRule ^forums/([0-9]+) forums.php?category=$1 [NC]
будет соответствовать всему, что начинается со строки forums / , за которой следуют одна или несколько цифр, независимо от того, есть ли что-либо после этого.Добавление конечного якоря ($), как указано выше
RewriteRule ^forums/([0-9]+)$ ...
, подтвердит, что строка заканчивается после цифр.
Это зависит от того факта, что если mod_rewrite не может найти совпадение, он не будет пытаться переписать и будет (при отсутствии какого-либо явного ресурса по этому пути) переходить к обработке Apache 404, которую затем вы можете переопределить.