Рейтинг:1

Запрещено для всего, кроме скриптов, расположенных во вложенных папках

флаг gr

Я хочу запретить все, что приходит на определенный домен (например, пример.com), за исключением некоторых точек входа (здесь файлы PHP), расположенных по определенному пути (например, example.com/subfolder1/subfolder2/script.php).

Вот фрагмент конфигурации, которую я использовал на своем виртуальном хосте для этого конкретного домена. Я до сих пор получаю 403 за все.

Для контекста я использую Apache 2.4.41 + FPM 7.2.

<VirtualHost *:443>
  ServerName example.com
  DocumentRoot /my/path
  <Directory /my/path>
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^/subfolder1/subfolder2$
    RewriteRule . - [F,L]
  </Directory>
</VirtualHost>
Рейтинг:0
флаг kz
RewriteCond %{REQUEST_URI} !^/subfolder1/subfolder2$
Правило перезаписи. - [Ж, Л]

Из-за якоря конца строки ($) это позволяет только /подпапка1/подпапка2 точно (не /подпапка1/подпапка2/script.php) и блокирует все остальное. С /подпапка1/подпапка2 предположительно является физическим каталогом, тогда mod_dir будет перенаправлять, чтобы добавить косую черту в конце, которая затем будет заблокирована этим правилом. Так что да, блокирует все.

Вам нужно удалить якорь конца строки ($) с конца CondPattern. Например:

RewriteCond %{REQUEST_URI} !^/subfolder1/subfolder2

Хотя, строго говоря, чтобы избежать конфликта со всем, что могло бы просто начинаться с подпапка2 (например. подпапка2foo.php), тогда вы должны использовать регулярное выражение, например ^/подпапка1/подпапка2($|/) вместо.

Обратите внимание, что если это единственный URL-путь, который вам нужно разрешить, вам не нужен условие, так как тест должен проводиться в Правило перезаписи директива напрямую. Например:

Правило перезаписи !^/подпапка1/подпапка2($|/) - [F]

л флаг не требуется с Ф флаг; это подразумевается.


Или вообще не используйте mod_rewrite. Например:

  <Directory /my/path>
    Require all denied
  </Directory>
  <Directory /my/path/subfolder1/subfolder2>
    Require all granted
  </Directory>

Это предпочтительнее, чем mod_rewrite, если у вас нет других требований.

флаг gr
Большое спасибо ! Как я могу не думать о твоем последнем решении? так просто :D
флаг kz
@alxsbn Поскольку вы упомянули «подпапку ** s **», было не совсем ясно, будет ли последнее решение работать за пределами вашего ограниченного примера. Хотя вы всегда можете использовать `` и регулярное выражение, если у вас есть несколько подпапок.

Ответить или комментировать

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