この非常に単純な.htaccessをNginxに変換する方法は?

May 20 2019

私はこれ.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 MichaelHampton May 20 2019 at 09:08

ifここではまったく使用しません。また、ファイルの存在を手動で確認することもありません。この一般的なパターンは、代わりにによって処理されtry_filesます。

例えば:

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

(Webアプリが壊れてい/て、URIの先頭を処理できない場合は、可能であればWebアプリを修正するか、そうでない場合はこの質問を参照してください。)

1 SandroBenevides May 21 2019 at 01:15

これらのルールを使用して修正できます。

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

内部に指示のない場所/ {}がある場合は、それを削除します。