我们有一个自定义的 WP 网站,必须将其从 Apache 迁移到 nginx,虽然大多数功能都运行正常,但有些大问题却出在了这里。
例如,在我们的自定义插件上,我们的 URL 结构如下所示:domain.com/causes-details/PERMALINK;PERMALINK 是我们在数据库中用来填充原因信息的字段。在 wordpress 中,这只是一个没有内容的页面和一个特殊的主题页面。
在 apache 中运行良好,但在 nginx 中根本不起作用。我们得到一个空页面。
在 apache 站点的根目录中有一个 .htaccess 文件,如下所示:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
所以我把它扔进了转换器http://www.anilcetin.com/convert-apache-htaccess-to-nginx/我得到了
if (-e $request_filename){
set $rule_0 1;
}
if ($request_filename ~ "-l"){
set $rule_0 1;
}
if (-d $request_filename){
set $rule_0 1;
}
if ($rule_0 = "1"){
#ignored: "-" thing used or unknown variable in regex/rew
}
rewrite ^/.*$ /index.php last;
但这并不能真正解决网站上的任何问题。因此,如果没有这个,我的 nginx 配置如下所示:
server {
listen 80;
root /usr/share/nginx/html/domain.com;
index index.php index.html index.htm;
server_name domain.com www.domain.com;
location / {
try_files $uri $uri/ /index.php?args;
}
location ~ /\. { access_log off; log_not_found off; deny all; }
location ~ ~$ { access_log off; log_not_found off; deny all; }
location ~ \.php$ {
try_files $uri $uri/ /index.php?args;
include fastcgi_params;
fastcgi_pass php5-fpm-sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
}
}
答案1
您的try_files
指令没有正确传递参数(您缺少 for $
。$args
您也不需要块try_files
内部的.php
。
location / {
try_files $uri $uri/ /index.php?$args;
}