Назад | Перейти на главную страницу

Apache перенаправляет абсолютный URL-адрес на относительный URL-адрес

Итак, я хочу загрузить веб-приложение из подпапки. Текущая конфигурация выглядит так

<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.