Мне нужно создать условие перезаписи для двух конкретных файлов в соответствии с запрошенным путем в URL-адресе. Возможно?
Условие 1:Если URL-адрес example.com/admin
, перейдите к admin.php?uri=params
. То есть:
example.com/admin/form
=>admin.php?uri=form
example.com/admin/form/edit
=>admin.php?uri=form/edit
и т.д...
Условие 2:Если URL-адрес принимает ЛЮБОЙ ДРУГОЙ параметр (, кроме /admin
), перейдите к index.php?uri=params
. Таким образом,:
example.com/about
=>index.php?uri=about
example.com/test
=>index.php?uri=test
example.com/blau/bleu
=>index.php?uri=blau/bleu
и т.д...
Попробуйте что-нибудь подобное:
DirectoryIndex index.php
Options -MultiViews
RewriteEngine On
RewriteRule ^admin(?:$|/([^.]*))$ admin.php?uri=$1 [QSA,L]
RewriteRule ^([^.]+)$ index.php?uri=$1 [QSA,L]
Это предполагает, что ни один из ваших URL-адресов, (которые необходимо переписать), не содержит точек(.
). Это позволяет избежать проверки файловой системы, чтобы убедиться, что запрос не сопоставляется со статическим ресурсом, который обычно включает расширение файла (, разделенное точкой).
MultiViews
необходимо отключить (, если это еще не сделано ), так как вы запрашиваете URL /admin
, который является базовым именем файла, в который вы перезаписываете. Если MultiViews был включен, то /admin.php
будет вызываться без параметра URL.
ФлагQSA
(Query String Append)требуется только в том случае, если вы ожидаете строку запроса в исходном запросе, которую необходимо добавить к переписанному URL-адресу.
Запрос корня документа (домашней страницы)вызоветindex.php
без параметра uri
.
В сторону:Просто примечание по терминологии...
Если URL-адрес принимает ЛЮБОЙ ДРУГОЙ параметр, (отличный от
/admin
)
То, что вы называете "параметром" здесь, на самом деле является URL-адресом-путь (или сегментов пути-). URL Параметры — это пары имя=значение в строке запроса (, куда вы хотите переписать запрос).
В вашем примере вы переписываете URL-путь в значение параметра URL.