从 apache 到 nginx 的重写问题

从 apache 到 nginx 的重写问题

我们有一个自定义的 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;
}

相关内容