Es lamentable, pero me veo obligado a hacer que una aplicación de WordPress y Laravel no solo coexistan sino que sean conscientes del estado de cada una. Tengo esto funcionando a través de un complemento de WordPress, un paquete laravel y una configuración de Apache, pero ahora necesito traducir la configuración para que funcione con nginx como servidor web.
Mi repositorio está configurado así:
/src
- aplicación laravel, debajo de la cual /public contiene el punto de entrada index.php a la aplicación
/wordpress
- aplicación de wordpress
Tengo la siguiente configuración de Apache VirtualHost que funciona y hace exactamente lo que necesito:
<VirtualHost *:80>
ServerName app.local
DocumentRoot /var/www/vhosts/app.local/wordpress
ErrorLog /var/www/vhosts/logs/app_local_error_log
<Directory "/var/www/vhosts/app.local/wordpress">
Options Indexes FollowSymlinks MultiViews
AllowOverride All
Require all granted
DirectoryIndex index.php
</Directory>
<Directory /var/www/vhosts/app.local/src/public>
DirectoryIndex index.php
Options FollowSymLinks MultiViews
AllowOverride All
</Directory>
Alias /xyz /var/www/vhosts/app.local/src/public
<Location "/xyz">
AllowOverride All
</Location>
</VirtualHost>
Todo lo que se encuentra bajo /xyz específicamente es manejado por laravel. Todo lo demás, incluido el root, lo maneja WordPress.
Aquí está mi configuración de nginx (estoy probando esto localmente con un cuadro laravel/homestead):
server {
listen 80;
server_name .app.local;
root "/home/vagrant/code/app/wordpress";
index index.html index.htm index.php;
charset utf-8;
location /xyz/ {
alias /home/vagrant/code/app/src/public/;
try_files $uri $uri/ /index.php?$query_string;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
access_log off;
error_log /var/log/nginx/app.local-error.log error;
sendfile off;
client_max_body_size 100m;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}
Siento que estoy muy cerca, sin embargo, parece que WordPress aún termina manejando la solicitud independientemente de si uso alias
o root
, agrego barras diagonales a las rutas o reorganizo las directivas de ubicación. Simplemente no sé lo suficiente sobre nginx para depurar esto, o cuáles son mis alternativas en cuanto a configuración. ¡Cualquier ayuda sería muy apreciada!
También intenté configurar una directiva de ubicación específica y personalizar los parámetros que paso a fastcgi, como se ve aquí, y eso parece no tener ningún efecto: