Попробуйте что-то вроде этого:
DirectoryIndex index.php
Параметры - Мультивиды
RewriteEngine включен
RewriteRule ^admin(?:$|/([^.]*))$ admin.php?uri=$1 [QSA,L]
RewriteRule ^([^.]+)$ index.php?uri=$1 [QSA,L]
Это предполагает, что ни один из ваших URL-адресов (которые необходимо переписать) не содержит точек (.
). Это позволяет избежать проверки файловой системы, чтобы убедиться, что запрос не сопоставляется со статическим ресурсом, который обычно включает расширение файла (разделенное точкой).
Мультивиды
необходимо отключить (если это еще не сделано), так как вы запрашиваете URL-адрес /админ
это базовое имя файла, в который вы перезаписываете. Если MultiViews был включен, то /admin.php
будет вызываться без параметра URL.
КСА
(Добавление строки запроса) требуется только в том случае, если вы ожидаете строку запроса в исходном запросе, которую необходимо будет добавить к переписанному URL-адресу.
Запрос корня документа (домашняя страница) вызовет index.php
без в ури
параметр.
В стороне: Просто замечание по терминологии...
Если URL принимает ЛЮБОЙ ДРУГОЙ параметр (кроме /админ
)
То, что вы здесь называете «параметром», на самом деле является URL-путем (или сегментами пути). URL-адрес Параметры являются парами имя=значение в строке запроса (то, на что вы хотите переписать запрос).
В вашем примере вы переписываете URL-путь в значение параметра URL.