Я удивлен, что это работает вообще в контексте для каталога, так как вам нужно было бы удалить префикс пути для каталога из шаблона:
При использовании механизма перезаписи в файлах .htaccess префикс для каждого каталога (который всегда одинаков для определенного каталога) автоматически удаляется для RewriteRule
сопоставления с шаблоном и автоматически добавляется после любой относительной (не начиная с косой черты или имени протокола) замены встречается конец набора правил.
В случае корневого каталога документа это будет ведущее /
, и правило будет выглядеть так:
RewriteRule ^directory/(.*)\??(.*)$ /directory/?page=$1&$2
Но кроме этого, RewriteRule
может проверять только путь URI, но не запрос; вам нужно RewriteCond
, чтобы сделать это. Итак, попробуйте это:
RewriteRule ^directory/(.+)$ /directory/?page=$1 [QSA]
Здесь .+
вместо .*
должно избегать бесконечной рекурсии, поскольку .*
соответствует всему, даже пустой строке (это было бы в случае пустого сегмента пути после /directory/
). А флаг QSA автоматически добавляет запрошенный запрос URI к новому.