我们正在将网站从 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;