0

nignx 構成ファイルに変換しようとしている htaccess ファイルがあります。

これが私のhtaccessファイルです。

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule    !\.(jpg|css|js|gif|png)$    public/    [L]
RewriteRule !\.(jpg|css|js|gif|png)$ public/index.php?url=$1

そして、nginx構成ファイルにあるルール:

location / {
if ($request_uri !~ "-f"){
        rewrite !\.(jpg|css|js|gif|png)$ public/ break;
}
rewrite !\.(jpg|css|js|gif|png)$ public/index.php?url=$1;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
        # Move to the @missing part when the file doesn't exist
        try_files $uri @missing;

        # Fix for server variables that behave differently under nginx/$
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        # Include the standard fastcgi_params file included with ngingx
        include fastcgi_params;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_index index.php;


        # Pass to upstream PHP-FPM; This must match whater you name you$
        #fastcgi_pass phpfpm;
        fastcgi_pass 127.0.0.1:9000;
}

location @missing {
        rewrite ^(.*)$ public/index.php?url=$1 break;
}

ただし、/ を押すと 403 Forbidden が返されますが、/public/index.php にアクセスできるため、書き換えが機能していません。

私が間違っていることについてのアイデアはありますか?

4

1 に答える 1

0

あなたのif ($request_uri !~ "-f")ステートメントは、nginxで必要な方法で解析しません。ファイルの存在をチェックしているのではなく、否定された regex に対して照合しています-f。nginx の場合にファイルの存在を確認するにはif ( -f $request_filename )

nginxステートメントの詳細については、 http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#ifを参照してくださいif

一般に、共通の .htaccess スタンザを置き換えます。

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule    <regex>    <target>

nginxに相当するもの:

location ~* <regex> { try_files $uri $uri/ <target>;}

あなたが述べたビットについては、次のようにネストされた場所を取得します。

location / {
  location ~* \.(jpg|css|js|gif|png)$ { try_files $uri $uri/ /public/; }
  location !~* (.*)\.(jpg|css|js|gif|png)$ { 
    try_files $uri $uri/ /public/index.php?url=$1; 
  }
}
于 2012-11-18T18:13:56.153 に答える