htaccess: защита перезаписи URL-адреса вручную

1

Возможно ли защитить один URL веб-сайта или несколько от изменения вручную?

Пример:

www.example.com/here-is-example-url/1234/page/ - это правильный URL-адрес

www.example.com/here-is-example - плохой URL (вручную измененный) или

www.example.com/here-is- - плохой URL (вручную измененный) или

www.example.com/here-is-example-2 - плохой URL (вручную изменен)

На данный момент я перенаправляю такие измененные адреса на главную страницу с последним RewriteRule, но я скорее вижу некоторое решение для обнаружения ручного изменения URL-адресов и блокировки доступа для такого посетителя.

Что RewriteRule или RewriteCond предотвратит это?

вот что я до сих пор:

#redirect to canonical url if no ending slash
RewriteRule ^([A-Za-z0-9-]+)/([0-9]+)/page$ $1/$2/page/ [R,L]
#redirect to canonical url if anything behind slash
RewriteRule ^([A-Za-z0-9-]+)/([0-9]+)/page/(.+)$ $1/$2/page/ [R,L]
#rewrite to PHP file if visiting the canonical url
RewriteRule ^([A-Za-z0-9-]+)/([0-9]+)/page/$ page.php?val1=$1&val2=$2 [L]

#redirect to Homepage url if no other rule match with missing ending slash
RewriteCond %{REQUEST_URI} !(/$|\.) 
RewriteRule (.*) http://www.domain.com/ [R,L]

В случае, если это не может быть разрешено некоторым RewriteRule, можно ли перенаправить такое поведение на 500 доступ запрещен?

  • 0
    Давайте вернемся на секунду здесь. Какую цель будет служить для того, чтобы эти URL генерировали ошибки? (Есть ли какая-то причина, по которой вы хотите сказать этим пользователям, чтобы они уходили?)
  • 0
    @ Duskwuff Я хочу показать 500 доступ запрещен для всех, если они вручную изменить URL-адрес. Например, последнее условие и правило, которое перенаправляет пользователя на домашнюю страницу, если отсутствует конечная косая черта - как настроить это условие и правило, чтобы оно было [F, L] - доступ запрещен на основе условия вместо перенаправления на домашнюю страницу?
Теги:
.htaccess
mod-rewrite

1 ответ

0

Вы можете использовать флаг F orbidden

RewriteRule here-is-example$ - [F,L]

как вы уже упоминали, вышеприведенное правило ловит только первый пример.

Большинство людей не видят коды статуса HTTP, вы можете использовать ErrorDocument для отображения пользовательского сообщения об ошибке.

ErrorDocument 404 /access-denied.html 

https://httpd.apache.org/docs/2.4/custom-error.html

Будьте осторожны, потому что нет способа узнать, имеет ли кто-то неправильный URL-адрес из-за ошибки вырезания и вставки или преднамеренного зондирования вашего сайта.

Это не то, о чем вам следует беспокоиться.

  • 0
    Что ж, ваш ответ решает только случай [здесь-пример-пример], поэтому без правильного регулярного выражения он будет работать только для этого одного примера, плюс как он будет работать на нескольких страницах (безопасный способ)?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню