WordPress 作为 Symfony (Symfony3) 子目录

Posted

技术标签:

【中文标题】WordPress 作为 Symfony (Symfony3) 子目录【英文标题】:WordPress As A Symfony (Symfony3) Subdirectory 【发布时间】:2017-02-15 03:50:52 【问题描述】:

我正在 DigitalOcean 上运行 Symfony 应用程序。我已经设置了整个站点并创建了 VirtualHosts。我需要将 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>

在 localhost 安装没有 VirtualHost 上运行完美。

但是在实时服务器上,假设我在 21.21.21.21 运行 Symfony,并且 21.21.21.21/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

我已经尝试在网上用一些答案来修补这个问题,没有任何改变。

【问题讨论】:

你确定博客目录有正确的文件拥有配置吗? @El_Matella 我不确定这意味着什么。请帮我理解,我会做的...... 【参考方案1】:

更新您的虚拟主机,以便将您的 /blog 目录排除在 Symphony 规则之外。而且您还需要更改为AllowOverride All,因为您在/blog 中使用.htaccess

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

请务必在更改后重新启动 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

【讨论】:

非常感谢您的回答。它在某种程度上起作用。现在 21.21.21.21/blog 显示默认的 apache2 目录列表。它列出了所有的 WordPress 文件,但没有自动获取 index.php? 我也学到了一些新东西,现在我知道 AllowOverride 做了什么。谢谢你。 修复列表文件....在您的 .htaccess 文件顶部添加Options -Indexes,然后在其下方添加DirectoryIndex index.php 我做对了吗?我已经更新了问题中的 .htaccess 。 WordPress 现在已经开始显示,但都是 WordPress 404。非常感谢您的帮助。 修复了!我之前在数据库中将 siteurl 更改为 21.21.21.21/blog/index.php 。一旦我改变它,它就像一个魅力。你是救生员。

以上是关于WordPress 作为 Symfony (Symfony3) 子目录的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 抛出 ServiceCircularReferenceException

Symfony 和 WordPress 的 nginx 配置并排运行

Symfony 3.1 作曲家冲突

需要同时运行 Symfony + React JS 和 WordPress

从Python / Django生成symfony 2.4密码

Symfony 4.4如何使用collectionType从0个字段开始