我在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
我尝试在网上修改一些答案,没有任何变化。
答案 0 :(得分:5)
更新您的vhost,以便从symphony规则中排除/blog
目录。而且,由于您在AllowOverride All
中使用.htaccess
,因此您还需要更改为/blog
。
<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