Htaccess: перенаправить и удалить пути после - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь заблокировать доступ к нашей странице /admin.php и всем, что связано с admin.php (это не папка в нашей файловой системе, мы используем центральный .htaccess в корневом каталоге).

Я могу сделать это следующим образом:

RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123$
RewriteCond %{THE_REQUEST} ^(.*)?admin\.php(.*)$ [NC]
RewriteRule ^(.*)$ https://oursite.com/$1 [R=301,L]

Это работает, однако, все, что после /admin.php остается в URL после перенаправления и переходит на страницу 404.Я просто хочу, чтобы он перенаправлял на дом.

Например, этот URL https://example.com/admin.php?/cp/login&return= перенаправляет на https://example.com/?/cp/login&return=.

Он просто удаляет часть администратора.Мне нужно это, чтобы раздеть все.

1 Ответ

0 голосов
/ 01 декабря 2018
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 кэшируется браузером, поэтому тестирование может быть проблематичным.

Вам необходимо очистить кэш браузера перед тестированием.

...