RewriteRule ^(.*)$ https://oursite.com/$1 [R=301,L]
Эта строка будет перенаправлена обратно на себя - она не "лишит администраторскую часть" ?!Обратная ссылка $1
в подстановке будет содержать значение admin.php
в вашем примере (взято из (.*)
в шаблоне RewriteRule
).Чтобы перенаправить на домашнюю страницу, вам нужно удалить обратную ссылку $1
.
Оставшаяся часть URL в вашем примере (то есть все, что после ?
) - это строка запроса .По умолчанию это действительно передается в подстановку (целевой URL) без изменений.Вам нужен флаг QSD
(Query String Discard) на Apache 2.4+.Или добавьте ?
в конец строки подстановки в Apache 2.2 (фактически создавая пустую строку запроса).
Вам также не нужно условие , который сравнивается с THE_REQUEST
серверной переменной, как это можно сделать (более эффективно) в шаблоне RewriteRule
.(Я предполагаю, что вы внутренне не переписываете на admin.php
?)
Итак, объединяя это, мы имеем:
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123$
RewriteRule admin\.php / [QSD,R=302,L]
Это проверяет наличие "admin.php" в любом месте URL-path запрошенного URL.
Вам не нужно , чтобы явно указывать абсолютный URL в подстановке , если вы перенаправляете обратно на тот же хост.
Обратите внимание, что это 302 (временное) перенаправление.Измените только на 301 (постоянный) - если это является намерением - когда вы подтвердили, что он работает нормально.301s кэшируется браузером, поэтому тестирование может быть проблематичным.
Вам необходимо очистить кэш браузера перед тестированием.