Я не знаю, что такое возможно или нет, но давайте попробуем. В прошлом (более трех лет назад) я узнал о таком решении (не знаю точно, как это), в одном учебнике MVC.
Структура каталога
Что я хочу сделать?
Когда пользователь обращается к 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
Я предполагаю, что .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-х ошибок (запрещено)