【问题标题】:WordPress As A Symfony (Symfony3) SubdirectoryWordPress 作为 Symfony (Symfony3) 子目录
【发布时间】: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 我不确定这意味着什么。请帮我理解,我会做的......

标签: php wordpress .htaccess symfony virtualhost


【解决方案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 。一旦我改变它,它就像一个魅力。你是救生员。
猜你喜欢
  • 1970-01-01
  • 2015-04-27
  • 2014-09-11
  • 2023-04-06
  • 2014-12-07
  • 2012-03-21
  • 1970-01-01
  • 1970-01-01
  • 2013-10-02
相关资源
最近更新 更多