如何配置 Apache 以使 Symfony4 路由在 WordPress 域的子目录中工作
How to config Apache to get Symfony4 routes working in subdirectory on a WordPress domain
在我的 Apache 服务器上,我在 www.domain.com 上安装了一个 WordPress,我想在 www.domain.com/symfony 上添加一个 Symfony4 安装。 Symfony 路由被带到 WordPress 404 页面(但仍然是正确的 URL 即 www.domain.com/symfony/about)。但是,如果我的 Symfony 应用程序中没有定义任何路由,那么基础 www.domain.com/symfony/ URL 将正确显示 Symfony4 入门页面。我的 Apache conf 文件有什么问题?
Web 服务器是 Apache 2.4,我尝试在 /etc/apache2 conf 文件中使用 Alias 和 AliasMatch 指令。 Alias 为所有 Symfony 路由显示 WordPress 404,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
时,它会将 Symfony URL 更改为 www.domain.com/symfony/index.php/index.php/index.php/index.php/index.php/index.php
,但结果相同(WordPress 404 页面)。 None 我的更改完全影响了 WordPress 部分 - 它仍然完美运行。
编辑 1
尝试了一个新的 conf 来测试它是否是我的 symfony 配置 - 它按预期工作所以我只是认为它一定是我的 Apache conf 中的东西。此配置将 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>
看来我现在有一个工作会议。不确定它是否会导致与我的配置不同的配置。我也做了很多 php bin/console cache:clear
因为我什至在 symfony 欢迎页面底部的小调试栏上收到 404 和 500 错误(没有显示在栏上,但栏实际上不会正确加载) .下面的文件是我合并到一个文件中的整个 conf。如果 url 路径以 /symfony
开头并且所有路由都有效,它会从我的 Symfony4 应用程序提供服务。
# /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-pack with composer,它在 symfony public 目录中添加了这个 .htaccess。文档说我可以通过将所有这些规则移动到我的 .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}:: ^(/.+)/(.*)::$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteCond %{HTTP:Authorization} .
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/ [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>
在我的 Apache 服务器上,我在 www.domain.com 上安装了一个 WordPress,我想在 www.domain.com/symfony 上添加一个 Symfony4 安装。 Symfony 路由被带到 WordPress 404 页面(但仍然是正确的 URL 即 www.domain.com/symfony/about)。但是,如果我的 Symfony 应用程序中没有定义任何路由,那么基础 www.domain.com/symfony/ URL 将正确显示 Symfony4 入门页面。我的 Apache conf 文件有什么问题?
Web 服务器是 Apache 2.4,我尝试在 /etc/apache2 conf 文件中使用 Alias 和 AliasMatch 指令。 Alias 为所有 Symfony 路由显示 WordPress 404,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
时,它会将 Symfony URL 更改为 www.domain.com/symfony/index.php/index.php/index.php/index.php/index.php/index.php
,但结果相同(WordPress 404 页面)。 None 我的更改完全影响了 WordPress 部分 - 它仍然完美运行。
编辑 1
尝试了一个新的 conf 来测试它是否是我的 symfony 配置 - 它按预期工作所以我只是认为它一定是我的 Apache conf 中的东西。此配置将 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>
看来我现在有一个工作会议。不确定它是否会导致与我的配置不同的配置。我也做了很多 php bin/console cache:clear
因为我什至在 symfony 欢迎页面底部的小调试栏上收到 404 和 500 错误(没有显示在栏上,但栏实际上不会正确加载) .下面的文件是我合并到一个文件中的整个 conf。如果 url 路径以 /symfony
开头并且所有路由都有效,它会从我的 Symfony4 应用程序提供服务。
# /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-pack with composer,它在 symfony public 目录中添加了这个 .htaccess。文档说我可以通过将所有这些规则移动到我的 .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}:: ^(/.+)/(.*)::$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteCond %{HTTP:Authorization} .
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/ [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>