Я пытаюсь добиться следующего через mod_rewrite:
1. Какова основная структура каталогов?
- /
- main / (папка)
- some_folder / (папка)
- another_folder / (папка)
- ... (произвольное количество таких папок)
- Yet_another_folder / (папка)
- .htaccess (волшебство идет сюда)
2. Что я пытаюсь сделать?
В этом сценарии все исполняемые файлы содержатся в главной папке, и к ним следует обращаться только через дополнительные папки. Более того, сценарии PHP полагаются на переменную окружения apache для передачи им некоторой информации, которая связана с именем папки, через которую они доступны. Другое специальное требование заключается в том, что главная папка не должна быть доступна напрямую (только через внутреннее перенаправление).
3. Как далеко я прошел?
Я реализовал следующий файл .htaccess:
RewriteEngine On<br>
RewriteCond %{REQUEST_URI} !^/(main|another)/.*$<br>
RewriteRule ^(.*)/(.*)$ /main/$2 [QSA,L,env=VAR_NAME:$1/weird_include.php]
Обычно он выполняет перенаправление, однако есть некоторые проблемы ...
4. В чем дело?
При таком подходе к папке main
(и another
тоже) можно получить прямой доступ, и я хочу, чтобы она была доступна только через одну из вспомогательных папок.
Вторая проблема заключается в том, что, поскольку существует перезапись, mod_rewrite добавляет префикс REDIRECT_
к переменным, и, поскольку я совершенно не контролирую исходный код, находящийся в main
, и для него требуются определенные имена переменных, это не работать на меня вообще.
Также я еще не нашел достойного способа изолировать доступ к папкам main
и other-main
...
5. Где, я полагаю, ключ к палатке?
Этот пост в PHP-документе по этой теме предлагает добавить правило, подобное этому
RewriteRule ^index\.php$ \ - [E=VAR1:%{REDIRECT_VAR1},E=VAR2:%{REDIRECT_VAR2},L]
решит проблему. Однако я не вижу, как я могу изменить это, чтобы соответствовать требованию «нет прямого доступа». А также - какие накладные расходы вносит mod_rewrite?
Другим важным вопросом будет, как ограничить доступ к main
и other-main
вышеупомянутым способом?
Будет ли добавление файла .htaccess в эти две папки, который проверяет наличие REDIRECT_VAR_NAME1 и, если он присутствует, перезаписывает его в VAR_NAME, оставляя URL-адрес нетронутым, а если он не перенаправляется на 403 forbidden
, то делает ли это? А также любой намек на то, что накладные расходы это будет оценено.