Как настроить Apache для получения маршрутов Symfony4, работающих в подкаталоге на домене WordPress - PullRequest
0 голосов
/ 22 декабря 2018

На моем сервере Apache у меня есть установка WordPress, работающая на www.domain.com, и я хочу добавить установку Symfony4 на www.domain.com/symfony.Маршруты Symfony перенаправляются на страницу WordPress 404 (но все равно являются правильным URL-адресом, т.е. www.domain.com/symfony/about).Однако, если в моем приложении Symfony не определены маршруты, базовый URL-адрес www.domain.com/symfony/ будет правильно отображать страницу начала работы с Symfony4.Что не так в моих файлах конфигурации Apache?

Веб-сервер - это Apache 2.4, я пытался использовать директивы Alias ​​и AliasMatch в файлах conf / etc / apache2.Alias ​​отображает WordPress 404 для всех маршрутов Symfony, а AliasMatch добавляет многие /index.php к URL-адресу и отображает те же 404. Я пытался скопировать то, что делает phpmyadmin с его Alias /phpmyadmin /usr/share/phpmyadmin

# /etc/apache2/sites-available/wordpress.conf
<Directory /var/www/wordpress>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
<VirtualHost *:80>
    ServerName domain.com
    ServerAlias www.domain.com
    ServerAdmin me@myemail.com
    DocumentRoot /var/www/wordpress
</VirtualHost>


# /var/www/wordpress/.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>


# /etc/apache2/sites-available/symfony.conf
Alias /symfony /var/www/symfony/app/public
<Directory /var/www/symfony/app/public>
    Options FollowSymLinks
    AllowOverride All
    Require all granted
    Allow from All
    FallbackResource /index.php
</Directory>


# /var/www/symfony/app/config/routes.yaml
about_index:
  path: /about
  controller: App\Controller\AboutController::index

Я ожидал www.domain.com/symfony/about чтобы перейти к /var/www/symfony/app/public/index.php и проложить маршрут к App\Controller\AboutController::index, но, похоже, WordPress пытается найти страницу /symfony/about и 404.

Когда я изменяю свой Alias /symfony /var/www/symfony/app/public на AliasMatch ^/symfony.* /var/www/symfony/app/public, он меняетсяURL-адрес Symfony равен www.domain.com/symfony/index.php/index.php/index.php/index.php/index.php/index.php, но имеет тот же результат (страница WordPress 404).Ни одно из моих изменений никак не повлияло на часть WordPress - она ​​по-прежнему функционирует отлично.

РЕДАКТИРОВАТЬ 1

Попробовал новый conf, чтобы проверить, если это моя конфигурация Symfony - она ​​работает, как и ожидалось, поэтому я простодумаю, что-то должно быть в моем Apache Confs.Этот конфиг рассматривает приложение Symfony как основной сайт, и WordPress полностью отключен:

# /etc/apache2/sites-available/symfony_only.conf
<Directory /var/www/symfony/app/public>
    Options FollowSymLinks
    AllowOverride All
    Require all granted
    Allow from All

    FallbackResource /index.php
</Directory>

<Directory /var/www/symfony/app/public/bundles>
    FallbackResource disabled
</Directory>

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias www.domain.com
    ServerAdmin me@myemail.com
    DocumentRoot /var/www/symfony/app/public
</VirtualHost>

1 Ответ

0 голосов
/ 23 декабря 2018

Похоже, я получил рабочий конф.Не уверен, что это даже приводит к какой-либо конфигурации, отличной от той, что была у меня.Я также сделал много php bin/console cache:clear, так как я даже получал ошибки 404 и 500 на маленькой панели отладки в нижней части страницы приветствия Symfony (не отображается на панели, но панель на самом деле не загружалась должным образом).Файл ниже - это весь мой конф, который я объединил в один файл.Он работает из моего приложения Symfony4, если путь URL начинается с /symfony, и все маршруты работают.

# /etc/apache2/sites-available/wordpress_symfony.conf
Alias /symfony /var/www/symfony/app/public

<Directory /var/www/symfony/app/public>
    AllowOverride All
    Require all granted
    Allow from All
    FallbackResource /index.php
</Directory>

<Directory /var/www/symfony/app/public/bundles>
    FallbackResource disabled
</Directory>

<Directory /var/www/wordpress>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias www.domain.com
    ServerAdmin me@myemail.com
    DocumentRoot /var/www/wordpress

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Также я добавил пакет symfony / apache с composer, который добавил этот .htaccess в symfonyобщедоступный каталог.В документах сказано, что я могу улучшить производительность, перенеся все эти правила в мой файл .conf и отключив переопределения:

# /var/www/symfony/app/public/.htaccess
DirectoryIndex index.php

<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]
    RewriteCond %{HTTP:Authorization} .
    RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ - [L]
    RewriteRule ^ %{ENV:BASE}/index.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        RedirectMatch 307 ^/$ /index.php/
    </IfModule>
</IfModule>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...