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 + React JS 和 WordPress