Используйте .htaccess, чтобы предотвратить доступ к корневому каталогу из открытого доступа

Я не знаю, что такое возможно или нет, но давайте попробуем. В прошлом (более трех лет назад) я узнал о таком решении (не знаю точно, как это), в одном учебнике MVC.

Структура каталога

  • WebRoot /
    • включает/
    • конфиг /
    • общественности /
      • изображений/
      • JS /
      • CSS /
      • index.php
    • init.php

Что я хочу сделать?

Когда пользователь обращается к http://www.mysite.com/a/b/c/ , перенаправляет все запросы на страницу /public/index.php . т.е. все запросы на веб-сайт будут проходить через страницу /public/index.php , кроме images/ , js/ и css/ каталогов, которые public/ .

Кроме того, http://www.mysite.com/includes/ будет перенаправляться на страницу index.php , а get includes/ как $query .

Страница Index.php

 <?php // get init file from webroot directory, which will load all required php files. define ('ROOT', dirname(dirname(__FILE__))); require_once (ROOT . 'init.php'); // get query from url (here, $query = "a/b/c/") if(isset($_GET['q'])) { $query = $_GET['q']; } // insert images, css etc. resource echo "<img src='http://www.mysite.com/images/foo.jpg' />"; echo "<script src='http://www.mysite.com/js/bar.js'></script>"; ?> 

Это будет полезно для тех, кто использует веб-хостинг, который не обеспечивает однократный доступ к каталогу веб-сайта.

РЕДАКТИРОВАТЬ

Хорошо, я нашел сайт, откуда я получил эту концепцию. См. Два файла .htaccess, используемые в корневом каталоге и в общедоступном каталоге. Ссылка на учебник MVC

Related of "Используйте .htaccess, чтобы предотвратить доступ к корневому каталогу из открытого доступа"

Я предполагаю, что .htaccess находится в WebRoot .

Чтобы переписать все запросы, вы просто используете RewriteRule . Если вы хотите исключить некоторые пути, вы используете один или несколько RewriteCond

 RewriteEngine on RewriteCond %{REQUEST_URI} !/images/ RewriteCond %{REQUEST_URI} !/css/ RewriteCond %{REQUEST_URI} !/js/ RewriteCond %{REQUEST_URI} !/public/index\.php RewriteRule .* public/index.php?q=$0 [L,QSA] RewriteRule ^images/.+ public/$0 [L] RewriteRule ^js/.+ public/$0 [L] RewriteRule ^css/.+ public/$0 [L] 

Флаг QSA добавляет любую другую существующую строку запроса в качестве аргументов index.php . Если вы не хотите добавлять существующую строку запроса, просто оставьте флаг QSA .

Если вы хотите, чтобы переписывание было видимым для клиента, вы должны добавить флаг R в RewriteRule , то есть [R,L,QSA] или [R,L] .

Вы можете использовать другие трюки, где ваша страница не будет перенаправлена ​​на другую страницу, но вы ограничите другого пользователя, чтобы увидеть индекс каталога

 Options -Indexes 

Добавьте этот текст в ваш .htaccess файл, он сгенерирует 403-х ошибок (запрещено)