Блокировать доступ к случайным URL-адресам с помощью Apache mod_rewrite

Это ссылка на руководства моего веб-сайта:

https://www.example.com/manual/ch016_user-moves.xhtml

, но, к сожалению, к нему можно получить доступ и таким способом:

https://www.example.com/manual/blablablafoobar/ch016_user-moves.xhtml

или

https://www.example.com/manual/what-ever-youwanttoputinhere/ch016_user-moves.xhtml

второй способ также вызывает отсутствие изображений и файлов, поскольку URL-адрес неизвестен путь. Как я могу заблокировать или перенаправить эти случайные пути, добавленные в URL-адрес между / manual / и file.xhtml ?

Единственные правила в моих конфигурациях vhost следующие:

RewriteEngine on
        RewriteRule ^/manual/(.*).xhtml /manual/index.php/$1 [PT]
        RewriteRule ^/manual/(.*).html /manual/index.php/$1 [PT]
        Alias /manual /home/piatek/chess-manual/
2
задан 27 February 2019 в 13:37
1 ответ

Тот факт, что эти URL-адреса доступны в первую очередь, может быть вызван вашими существующими директивами:

 RewriteRule ^ / manual /(.*). Xhtml /manual/index.php/$1 [PT]
RewriteRule ^ / manual /(.*). Html /manual/index.php/$1 [PT]
 

В частности, (. *) соответствует чему угодно - другими словами, неограниченная глубина URL-пути (которая затем остается для вашего index.php сценарий для расшифровки - что он, по-видимому, успешно справляется!). Попробуйте ограничить это значением ([^ /] +) , чтобы оно соответствовало только имени файла, а не всему URL-пути. Эти две директивы также можно объединить в одну.

Например, попробуйте следующее вместо двух вышеуказанных директив:

RewriteRule ^/manual/([^/]+)\.x?html$ /manual/index.php/$1 [PT]

Это, вероятно, приведет к тому, что эти «недействительные» URL-адреса вернут 404.

1
ответ дан 3 December 2019 в 12:30

Теги

Похожие вопросы