Вы можете сделать это с четырьмя правилами, по одному для каждого случая:
RewriteRule ^([^/]+)$ search.php?q=$1
RewriteRule ^([^/]+)/([0-9]+)$ search.php?q=$2&p=$1
RewriteRule ^([^/]+)/([^/]+)$ search.php?q=$2&cat=$1&p=1
RewriteRule ^([^/]+)/([^/]+)/([0-9]+)$ search.php?q=$2&cat=$1&p=$3
И с этим правилом перед другими правилами любой запрос, который может быть сопоставлен с существующими файлами, будет проходить через:
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^ - [L]
Теперь ваша последняя проблема, что внешние ссылки не могут быть найдены, связана с тем, что вы, вероятно, используете относительные пути URL, такие как css/style.css
или ./css/style.css
.Эти относительные ссылки разрешаются из базового URL-пути, который является URL-путем URL-адреса документа, в котором используются ссылки. Таким образом, в случае запроса /category/keyword
относительная ссылка, такая как css/style.css
, разрешается в /category/keyword/css/style.css
ине /css/style.css
.Использование абсолютного пути URL /css/style.css
делает его независимым от фактического базового пути URL