Это хорошая практика, чтобы сделать системный корень недоступным? - PullRequest
0 голосов
/ 12 ноября 2011

Допустим, у нас есть следующая схема:

root/
    application/
        -public/
            index.php
            css/
            img/
            javascript/
        ...
    system/
        ...

Я думал, что если я создам файл .htaccess в корне со следующими правилами:

RewriteEngine On
RewriteRule \.(css|jpe?g|gif|png|js|ico)$ - [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ application/public/index.php?url=$1 [QSA,L]

Я быбыть в состоянии сделать другую папку, кроме общедоступной, недоступной.Предположим, что index.php - это файл, который загружает все файлы, которые нужны приложению, и включает и требует их (с указанием относительных путей): приложение на самом деле запускается в index.php, и каждый публичный файл, такой как таблица стилей CSS, изображения или сценарий JavaScriptв общедоступной папке.Таким образом, вы, как пользователь, не можете получить доступ к системной папке, потому что если вы введете цифру www.site.com/, это будет означать root / application / public /.Я прав?

Но установленное там правило htaccess не работает ... Если я помещаю этот htaccess в корневую папку и пытаюсь получить доступ к корневой папке, браузер показывает мне список файловкорневая папка (приложение и система).Почему он не работает?

Я использовал это некоторое время назад, когда index.php находился в корневой папке:

RewriteEngine On
RewriteRule \.(css|jpe?g|gif|png|js|ico)$ - [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

, и он работал просто отлично.Почему не работает новый?

Ответы [ 2 ]

4 голосов
/ 12 ноября 2011

Корень документа вашего проекта должен быть установлен в папку /public.

Таким образом, это единственная папка, к которой веб-пользователь будет иметь доступ.

Редактировать: для получения дополнительной информации обратитесь к руководству по Apache http://httpd.apache.org/docs/2.0/mod/core.html#documentroot

0 голосов
/ 13 ноября 2011

Мой начальный код был верным.За исключением третьей строки, которая не учитывает / папку и заставляет меня увидеть ее вместо перенаправления в приложение / public /.Комментируя третью строку, все работало нормально.

RewriteEngine On
RewriteRule \.(css|jpe?g|gif|png|js|ico)$ - [L]
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ application/public/index.php?url=$1 [QSA,L]
...