Итак, я хочу загрузить веб-приложение из подпапки. Текущая конфигурация выглядит так
<VirtualHost *:80>
ServerName YOUR IP ADDRESS/DOMAIN
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/
<Directory /var/www/html/monica/public/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
# Everything under this line has been added by me to try to make the redirect work
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /var/www/html/monica/public/$1 [R]
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Страницы обслуживаются правильно, но поскольку файлы содержат абсолютный URL-адрес, он продолжает давать сбой. Я новичок в Apache, поэтому не знаю, что делаю не так, и поиск ответа был тщетным.
Если я сделаю DocumentRoot /var/www/html/monica/public/
он работает правильно, но я хочу получить к нему доступ из подкаталога, что-то вроде localhost/monica/
Примечание: это веб-приложение было создано для доступа из базы ( https://github.com/monicahq/monica/)
думаю Я понимаю, о чем вы сейчас говорите (хотя был бы полезен пример «абсолютного пути» того, как вы ссылаетесь на свои активы). Я предполагаю, что вы ссылаетесь на свои активы примерно так /img/image.jpg
(или https://example.com/img/image.jpg
)? В то время как фактический ресурс расположен по адресу /monica/public/img/image.jpg
? Итак, вам в основном нужно переписать все ваши URL-адреса (для статических ресурсов) в /monica/public
подкаталог. Но разве это не влияет на ваши межстраничные URL-адреса? (Если вы не используете исключительно родственник URL-адреса между страницами?)
Например, вместо существующего <Directory>
блок, попробуйте следующее. Обратите внимание Directory
path ссылается на корень вашего документа.
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.+\.(?:jpg|png|css|js))$ /monica/public/$1 [L]
</Directory>
Цель проверки расширений файлов (ваших статических ресурсов) - избежать проверки "файл существует" на каждый запрос (что относительно дорого).
Это предполагает, что у вас есть .htaccess
файл, расположенный в /monica/public/.htaccess
(как показано в вашей файловой структуре), который затем направляет запрос. (В противном случае это может привести к циклу перезаписи, если ресурс действительно не существует.)
Если я сделаю DocumentRoot
/var/www/html/monica/public/
он работает правильно, но я хочу получить к нему доступ из подкаталога, что-то вродеlocalhost/monica/
Однако звучит так, будто вам следует «исправить» свои URL-пути (маршрутизацию в Laravel) вместо того, чтобы переписывать ресурсы?
ОБНОВИТЬ:
можешь сказать мне, как бы я это сделал?
Я не уверен, это может быть проблема Laravel / PHP? Корень документа будет /var/www/html/monica/public/
(путь к файловой системе), но вы хотите эффективно обслуживать свой контент из /monica
подкаталог в URL-путь. Обратите внимание, что "monica" в /var/www/html/monica/public/
это другое слово "monica", чем в вашем URL. Вы можете разместить свое веб-приложение в /monica
подкаталог в файловой системе (так что абсолютный путь к файловой системе будет /var/www/html/monica/public/monica
) ИЛИ вы измените все URL-адреса в своем веб-приложении, чтобы включить /monica/
в начале URL-пути.
Независимо от того, как вы это делаете, все URL-адреса в вашем веб-приложении (для статических ресурсов и всего остального) должны запускаться /monica
. Итак, я не вижу другого пути, кроме изменения вашей маршрутизации в Laravel.
Apache может помочь с перемещение содержимое, скажем, от корня документа до /monica
подкаталог, выполнив внешнее перенаправление. Но это только для SEO, а не для постоянного использования вашими пользователями (медленнее, дополнительная нагрузка на сервер и т. Д.).
Если я изменю его на это ... ресурсы снова перестанут загружаться. Вы знаете почему?
<Directory /var/www/html/monica> Options Indexes FollowSymLinks AllowOverride All Require all granted RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (.+\.(?:jpg|png|css|js))$ /public/$1 [L] </Directory>
Потому что (если мое предположение в начале моего ответа все еще верное) вы ссылаетесь на свои активы, например /img/image.jpg
и нет /monica/img/image.jpg
.