我已经阅读并尝试了 3 天,但似乎无法获得正确的规则组合来执行 Apache2 服务器所做的事情。
Apache2 规则是:
RewriteRule ^/about/(wp-(content|admin|includes).*) /wordpress/$1 [L]
RewriteRule ^/about/(.*\.php)$ /wordpress/$1 [L]
RewriteRule ^/about/(.*) /wordpress/index.php [L]
它只是检测静态 slug /about/
,并在传递给 PHP 之前默默地/wordpress/
在前面添加了一个。
但是,使用 Nginx 时,进行重写并将静默重写传递给 PHP 是没有意义的。
在 Nginx 中我有:
location ~ ^/about/(wp-(content|admin|includes).*) {
try_files /wordpress/$1 =404;
}
location ~ ^/about/(.*\.php)$ {
try_files /wordpress/$1 =404;
}
location ~ ^/about/(.*) {
try_files /wordpress/index.php =404;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
为了进行故障排除,所有其他位置指令均被注释掉。
/about/
- 尝试下载二进制文件。
/about/index.php
- 尝试下载二进制文件。
/about/wp-admin/
- 产生 404 未找到。
使用基本 Nginx 配置时,PHP-FPM 可以正常工作。我认为前两个规则没有将重写的 URL 传递到后端。我在这里做错了什么?
答案1
location ^~ /about/ {
rewrite ^/about/(wp-(content|admin|includes).*) /wordpress/$1 last;
rewrite ^/about/(.+\.php)$ /wordpress/$1 last;
rewrite ^ /wordpress/index.php last;
}
location ~ \.php$ {
...
}