Ответ 1
Вы должны относиться к правилам отдельно. Все условия, предшествующие правилам, применяются только к одному правилу. Следующее правило не затрагивается этим правилом. Вы пытались "объединить" два правила. Второе правило никогда не могло сравниться, поскольку первый из них был уловкой, которая изменила синтаксис. Кроме того, вы должны убедиться, что первое правило не захватывает нежелательные запросы. Также подумайте, хотите ли вы использовать оператор *
или +
в регулярных выражениях. Я предлагаю вам использовать оператор +
, чтобы у вас было ясное сообщение об ошибке при запросе пустых значений для "страницы" или "подстраницы".
Итак, это может приблизиться к тому, что вы ищете:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ index.php?p=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)$ index.php?p=$1&sp=$2 [L]