我正在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>
在没有VirtualHost的 localhost安装上,它可以完美运行。
但是在实时服务器上,假设在21.21.21.21运行了Symfony,而21.21.21.21/blog应该打开博客,但没有打开,而是转到了Symfony404。而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
我已经尝试过修改网页上的一些答案,但没有任何变化。
更新您的虚拟主机,以便从交响乐规则中排除/blog
目录。 而且,由于您在/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>
确保更改后重新启动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