htaccess изменить webroot и защитить файлы - PullRequest
1 голос
/ 11 февраля 2011

Я всегда следил за тем, чтобы код моего приложения, файлы конфигурации, журналы и т. Д. Хранились за пределами корня сети.Это просто здравый смысл.Итак, структура моего проекта выглядит примерно так ...

/app/
/config/
/web/

Мой клиент уже с Godaddy, поэтому я тупо зарегистрировал базовый пакет хостинга для Linux, прежде чем понять, что они не позволяют вам получить доступ к одному уровнювыше вашего webroot ИЛИ измените ваш webroot на один уровень ниже.

Их сотрудник службы технической поддержки только что сказал мне, чтобы я создал новую папку там и назвал ее «web» и сделал «перенаправление HTML» на это.тьфу.Тогда очевидная проблема в том, что кто-то может просто перейти к mydomain.com/config/database.yml

Итак, я очень близок к перемещению хостов, но мне было интересно, если кто-нибудь знает способ (я полагаю, htaccess), что я могу прозрачновместо этого перенаправьте все запросы на mydomain.com на mydomain.com/web.Затем убедитесь, что в / app /, / config / и т. Д. Нет доступа к файлам ...

В каталоге / web / мне нужен mod_rewrite, поскольку это приложение Symfony.

РЕДАКТИРОВАТЬ:Я добавил следующий .htaccess в корень моего проекта

Options All -Indexes

<FilesMatch "\.(htaccess|htpasswd|ini|php|log|yml)$">
Order Allow,Deny
Deny from all
</FilesMatch>

, что дает мне некоторую уверенность.Но я все еще не хочу, чтобы люди приходили по адресу:

mydomain.com/somestupidsubfolder

Ответы [ 2 ]

0 голосов
/ 15 февраля 2011

Хм, это обычная проблема для таких хостингов, когда вы не можете разместить свои источники вне webroot_dir. Это не нормально для безопасности, но ничего не поделаешь ... мы должны поместить его в корень сети.

Так что все источники хранятся в директории проекта: приложения, кеш, конфиг, данные, библиотека, лог, плагины, тест и т. Д. Директория проекта хранится в вашем webrootdir с именем 'httpdocs'


index.php содержит нечто подобное:

require_once(dirname(__FILE__).'/project/config/ProjectConfiguration.class.php');
$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false);
sfContext::createInstance($configuration)->dispatch();

файл конфигурации проекта ProjectConfiguration.class.php содержит:

//full path to autoload
require_once '/usr/local/www/vhosts/mywebsite.com/httpdocs/project/lib/symfony/autoload/sfCoreAutoload.class.php';
sfCoreAutoload::register();

class ProjectConfiguration extends sfProjectConfiguration
{
  public function setup()
  {
    $this->setWebDir($this->getRootDir() . '/..'); // <<<-- this does the trick
    $this->enablePlugins(...);
  }
}

и НЕ ЗАБУДЬТЕ закрыть ваши источники (dir 'project) с помощью htaccess.

гл

0 голосов
/ 11 февраля 2011
RewriteEngine On
RewriteRule ^/(.*)$ /web/$1
...