Php WordPress作为Symfony(Symfony3)子目录

Php WordPress作为Symfony(Symfony3)子目录,php,wordpress,.htaccess,symfony,virtualhost,Php,Wordpress,.htaccess,Symfony,Virtualhost,我正在DigitalOcean上运行Symfony应用程序。我已经设置了整个网站并创建了虚拟主机。我需要将WordPress作为子目录(/blog)运行。据我所知,Symfony倾向于忽略/web中的子目录,所以我创建了/web/blog并在其中安装了WordPress <VirtualHost *:80> DocumentRoot /var/www/html/site.com/web <Directory /var/www/html/site.com/web&

我正在DigitalOcean上运行Symfony应用程序。我已经设置了整个网站并创建了虚拟主机。我需要将WordPress作为子目录(/blog)运行。据我所知,Symfony倾向于忽略/web中的子目录,所以我创建了/web/blog并在其中安装了WordPress

<VirtualHost *:80>
    DocumentRoot /var/www/html/site.com/web
    <Directory /var/www/html/site.com/web>
        AllowOverride None
        Order Allow,Deny
        Allow from All

        <IfModule mod_rewrite.c>
            Options -MultiViews
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ app.php [QSA,L]
        </IfModule>
    </Directory>

    ErrorLog /var/log/apache2/symfony_error.log
    CustomLog /var/log/apache2/symfony_access.log combined
</VirtualHost>

DocumentRoot/var/www/html/site.com/web
不允许超限
命令允许,拒绝
通融
选项-多视图
重新启动发动机
重写cond%{REQUEST_FILENAME}-F
重写规则^(.*)$app.php[QSA,L]
ErrorLog/var/log/apache2/symfony_error.log
CustomLog/var/log/apache2/symfony_access.log组合
在没有VirtualHost的localhost安装上,这可以完美运行

但是在实时服务器上,假设在21.21.21.21我运行了Symfony,21.21.21.21/blog应该打开blog,但它没有打开,而是转到Symfony 404。而21.21.21.21/blog/index.php运行博客(WordPress)

位于/web/blog中的WordPress.htaccess如下所示:

Options -Indexes
DirectoryIndex index.php

# BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /blog/
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /blog/index.php [L]
</IfModule>
# END WordPress
选项-索引
DirectoryIndex.php
#开始WordPress
重新启动发动机
重写库/博客/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/blog/index.php[L]
#结束WordPress

我曾尝试在网上用一些答案对此进行修补,但没有任何改变。

更新您的vhost,以便将您的
/blog
目录从symphony规则中排除。由于您正在
/blog
中使用
.htaccess
,您还需要更改为
AllowOverride All

<VirtualHost *:80>
    DocumentRoot /var/www/html/site.com/web
    <Directory /var/www/html/site.com/web>
        AllowOverride All
        Order Allow,Deny
        Allow from All

        <IfModule mod_rewrite.c>
            Options -MultiViews
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteCond %{REQUEST_URI} !^/blog(/.+)? [NC]
            RewriteRule ^(.*)$ app.php [QSA,L]
        </IfModule>
    </Directory>

    ErrorLog /var/log/apache2/symfony_error.log
    CustomLog /var/log/apache2/symfony_access.log combined
</VirtualHost>

DocumentRoot/var/www/html/site.com/web
允许超越所有
命令允许,拒绝
通融
选项-多视图
重新启动发动机
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_URI}^/博客(/。+)?[北卡罗来纳州]
重写规则^(.*)$app.php[QSA,L]
ErrorLog/var/log/apache2/symfony_error.log
CustomLog/var/log/apache2/symfony_access.log组合
请确保在更改后重新启动apache

WordPress.htaccess更改:

 Options -Indexes
 DirectoryIndex index.php

# BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /blog/
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /blog/index.php [L]
</IfModule>
# END WordPress
选项-索引
DirectoryIndex.php
#开始WordPress
重新启动发动机
重写库/博客/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/blog/index.php[L]
#结束WordPress

更新vhost,以便将您的
/blog
目录从symphony规则中排除。由于您正在
/blog
中使用
.htaccess
,您还需要更改为
AllowOverride All

<VirtualHost *:80>
    DocumentRoot /var/www/html/site.com/web
    <Directory /var/www/html/site.com/web>
        AllowOverride All
        Order Allow,Deny
        Allow from All

        <IfModule mod_rewrite.c>
            Options -MultiViews
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteCond %{REQUEST_URI} !^/blog(/.+)? [NC]
            RewriteRule ^(.*)$ app.php [QSA,L]
        </IfModule>
    </Directory>

    ErrorLog /var/log/apache2/symfony_error.log
    CustomLog /var/log/apache2/symfony_access.log combined
</VirtualHost>

DocumentRoot/var/www/html/site.com/web
允许超越所有
命令允许,拒绝
通融
选项-多视图
重新启动发动机
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_URI}^/博客(/。+)?[北卡罗来纳州]
重写规则^(.*)$app.php[QSA,L]
ErrorLog/var/log/apache2/symfony_error.log
CustomLog/var/log/apache2/symfony_access.log组合
请确保在更改后重新启动apache

WordPress.htaccess更改:

 Options -Indexes
 DirectoryIndex index.php

# BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /blog/
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /blog/index.php [L]
</IfModule>
# END WordPress
选项-索引
DirectoryIndex.php
#开始WordPress
重新启动发动机
重写库/博客/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/blog/index.php[L]
#结束WordPress

您确定博客目录具有正确的文件拥有配置吗?@El_Matella我不确定这意味着什么。请帮助我理解,我会做的…你确定博客目录有正确的文件拥有配置吗?@El_Matella我不确定这意味着什么。请帮我理解,我会的…非常感谢你的回答。它在某种程度上起了作用。现在21.21.21.21/blog显示默认的apache2目录列表。它列出了所有WordPress文件,但没有自动获取index.php?我还学到了一些新东西,现在我知道AllowOverride的功能了。谢谢。要修复列表文件。。。。在.htaccess文件的顶部添加
Options-index
,然后在下面添加
DirectoryIndex.php
我做得对吗?我已经更新了问题中的.htaccess。WordPress现在已经开始显示,但它都是WordPress 404。非常感谢你的帮助,修好了!我之前在DB中将siteurl更改为21.21.21.21/blog/index.php。我一改变它,它就像一个符咒。你是个救命恩人。非常感谢你的回答。它在某种程度上起了作用。现在21.21.21.21/blog显示默认的apache2目录列表。它列出了所有WordPress文件,但没有自动获取index.php?我还学到了一些新东西,现在我知道AllowOverride的功能了。谢谢。要修复列表文件。。。。在.htaccess文件的顶部添加
Options-index
,然后在下面添加
DirectoryIndex.php
我做得对吗?我已经更新了问题中的.htaccess。WordPress现在已经开始显示,但它都是WordPress 404。非常感谢你的帮助,修好了!我之前在DB中将siteurl更改为21.21.21.21/blog/index.php。我一改变它,它就像一个符咒。你是救命恩人。