Возможно ли защитить один 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 доступ запрещен?
Вы можете использовать флаг 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-адрес из-за ошибки вырезания и вставки или преднамеренного зондирования вашего сайта.
Это не то, о чем вам следует беспокоиться.