.htaccess запрещает точечные файлы, но разрешает шифрование

#regex #apache #.htaccess #redirect #url-rewriting

Вопрос:

Моя цель-запретить доступ ко всем точечным файлам , например .htaccess , .env и отправить обратно 404, но разрешить .well-known доступ к папке letsencrypt

 RewriteEngine On
RewriteRule "(^|/).(?!well-known)" - [F]
RedirectMatch 404 /..*$
 

Любой намек на то, как этого добиться, высоко ценится
Лучший эндо

Ответ №1:

Вместо этого попробуйте выполнить следующее:

 RewriteEngine On

RewriteRule (?:^|/).[^/] $ - [R=404]
 

Это будет 404 для любого файла (или, скорее, последнего сегмента URL-пути), который начинается с точки. Но это позволит .well-known/ — так как это каталог, и поэтому он также снабжен по крайней мере косой чертой именем файла.

ОБНОВЛЕНИЕ: Изменено регулярное выражение, чтобы оно соответствовало точке в начале последнего сегмента пути, а не где-либо в последнем сегменте пути!

Обратите внимание, что F флаг отвечает 403 «Запрещено», а не 404, как было запрошено.


В качестве альтернативы вы можете использовать <Files> (или <FilesMatch> ) контейнер, который соответствует только «файлам». Например:

 <Files ".*">
    # 404 Not Found
    Redirect 404 /

    # OR... 403 Forbidden
    #Require all denied
</Files>
 

Хотя это также блокирует запрос на /.well-known (без завершающей косой черты) — хотя в любом случае это не совсем корректный запрос.

Комментарии:

1. Это довольно элегантный способ, тх

2. @endo.anaconda На самом деле в регулярном выражении была «ошибка», так как она соответствовала бы точке в любом месте последнего сегмента пути, а не только в начале. например /some.thing , также была бы заблокирована! Я обновил свой ответ (улучшенное регулярное выражение). Я также добавил альтернативное решение с использованием <Files> контейнера.