Nginx 重写规则不起作用

Nginx 重写规则不起作用

我们正在将网站从 Apache 迁移到 Nginx。到目前为止,我们从 .htaccess 规则转换为 nginx 的规则运行良好,但这条特定规则让我很为难。

我尝试过使用 if 的在线转换器(我不使用),并尝试手动转换规则,但没有任何效果。如果有人能指导我正确的方向或指出我哪里做错了,那将非常有帮助。

Apache .htaccess 规则:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([a-z]+)/([a-z]+).html$ /products/code_asset_2019.php?page=$1&filename=$2 [L]

RewriteRule ^(.*)/(.*\.php)$ /products/code.php?page=$1
RewriteRule ^(.*).html$ /products/code.php?page=$1

</IfModule>

目录结构: root /var/www/html

里面

/html

,我们有/products一个包含代码_asset_2019.php代码.php

我转换的规则不起作用:

location /products {
      try_files $uri $uri/ @rules;
    }

    location @rules {
    rewrite ^/([a-z]+)/([a-z]+)\.html$ /products/code_asset_2019.php?page=$1&filename=$2 last;
    rewrite ^/(.)/(.\.php)$ /products/code.php?page=$1;
    rewrite ^/(.*)\.html$ /products/code.php?page=$1;

    return 404;
}

答案1

为什么不把这个代替你拥有的一切:

rewrite ^/products/([a-z]+)/([a-z]+)\.html$ /products/code_asset_2019.php?page=$1&filename=$2 last;
rewrite ^/products/(.)/(.\.php)$ /products/code.php?page=$1;
rewrite ^/products/(.*)\.html$ /products/code.php?page=$1;

相关内容