Я запутался с Apache vhost
Вопрос
Я создаю веб-приложение с помощью Zend Framework, и мне нужно указать моему приложению на "общедоступную" папку приложения:
Так что в основном, когда я звоню http://localhost/myapp
он должен отображать http://localhost/myapp/public/
Я создал файл виртуального хоста под названием myapp в /etc/apache2/sites-available/:
<VirtualHost *:80>
DocumentRoot /var/www/myapp/public/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/myapp/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Но это не работает.Когда я звоню http://localhost/myapp, он отображает структуру каталогов приложения, и когда я нажимаю на "общедоступную" папку, тогда он отображает то, что я хочу, чтобы отображалось по умолчанию...Я никогда раньше не настраивал vhosts, и это все, что я получил из руководств по этому поводу.
Решение 2
Хорошо, я каким-то образом нашел способ...Я не думаю, что это обязательно правильный / наилучший способ, но...
в httpd.conf (в папке apache2):
Listen 10089
<VirtualHost *:10089>
DocumentRoot "/var/www/myapp/public"
<Directory "/var/www/myapp/public">
Order allow,deny
Allow from all
AllowOverride all
</Directory>
</VirtualHost>
Мое приложение теперь доступно через localhost: 10089 После включения мода перезаписи в apache я добавил необходимый .htaccess, один в корне моего приложения, перенаправив все на index.php (Zend framework поддерживает удобную навигацию по URL и работает таким образом):
RewriteEngine on
RewriteRule .* index.php
и второй файл .htaccess внутри моей общедоступной папки, позволяющий людям получать доступ к файлам .jpg, .ico и т.д. И не перенаправляться на индексацию для всего:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]
Надеюсь, это кому-то поможет!
Другие советы
В вашем первом списке у вас было другое значение для тега Directory, и вы вообще исключили 'public'.В значении DocRoot также была косая черта после 'public', но она была удалена со второй попытки.Не уверен, что это что-то изменило, но я считаю, что рекомендуется не включать завершающие косые черты.
Кроме того, просто интересно...вы запускаете это на локальном компьютере?У меня были проблемы с тем, что Skype захотел использовать порт 80, если я начал запускать его перед своим сервером apache.Skype будет использовать другой порт, если 80 уже используется.Если это не Skype, возможно, существует другое приложение, которое использует порт 80 и создает помехи.Возможно, именно поэтому вы добились успеха в другом порту.