不幸的是,我不得不让 wordpress 和 laravel 应用程序不仅共存,而且还要了解彼此的状态。我通过 wordpress 插件、laravel 包和 Apache 配置实现了此功能,但现在我需要转换配置以使用 nginx 作为 Web 服务器。
我的存储库设置如下:
/src
- laravel 应用程序,其下的 /public 包含应用程序的 index.php 入口点
/wordpress
- WordPress 应用程序
我有以下 Apache VirtualHost 配置,它可以完全满足我的需要:
<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>
/xyz 下的所有内容均由 laravel 处理。其他所有内容(包括 root)均由 wordpress 处理。
这是我的 nginx 配置(我正在使用 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;
}
}
我觉得我已经非常接近了,但是无论我使用alias
或root
,在路径后附加斜杠,还是重新排列位置指令,wordpress 似乎仍然会处理请求。我只是对 nginx 了解不够,无法调试这个问题,也不知道我的配置替代方案是什么。任何帮助都将不胜感激!
我还尝试设置特定的位置指令并自定义传递给 fastcgi 的参数,如下所示,但似乎没有效果: