如何将这个非常简单的 .htaccess 转换为 Nginx?

如何将这个非常简单的 .htaccess 转换为 Nginx?

我正在使用这个.htaccess将 URL 后面的所有内容传递给$param,因此 example.com/news/id转到 PHP 作为$_GET['param']='news/id'。但 Nginx 总是将我抛到 404 页面。

我的.htaccess

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule  (.*) index.php?param=$1

我在 Nginx 中尝试过default.conf


server {
        listen 80;
        listen [::]:80;
    server_name domain.com;
        root    /var/www/html;

        location / {
                if (!-f $uri){
                        set $rule_0 1$rule_0;
                }
                if (!-d $uri){
                        set $rule_0 2$rule_0;
                }
                if ($rule_0 = "21"){
                rewrite ^(.*) index.php?param=$1;
                }
        }
}

答案1

您根本不会if在这里使用,也不会手动检查文件是否存在。这种常见模式由try_files

例如:

location / {
    try_files $uri $uri/ /index.php?param=$uri;
}

(如果您的 Web 应用程序出现故障,无法处理/URI 中的前导,请尽可能修复 Web 应用程序,或者参阅这个问题如果不。)

答案2

我可以使用以下规则修复它:

server{
try_files $uri $uri/ @rewrite;
  location @rewrite {
  rewrite ^/(.*)$ /index.php?_url=$1;
  }
}

如果您的 location / { } 里面没有任何指令,请将其删除。

相关内容