web-dev-qa-db-ja.com

htaccessルールをnginxルールに「変換」する方法

このルールをnginxルールに「変換」したいと思います。ロケーションブロックは適切な場所だと思いますが、私のソリューションは機能しません。

Options -Indexes
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f
RewriteRule ^(.*)$ public/$1 [QSA,END]
RewriteCond %{REQUEST_FILENAME} !index\.php
RewriteRule ^(.+)$ index.php?route=$1 [QSA,L]

私はこれを試しました

location / {
  rewrite ^(.*)$ /public/$1;
  rewrite ^(.+)$ /index.php?route=$1 break;
}
2
sareew

Nginx rewriteディレクティブは無条件に適用されますが、書き換えルールには多くの条件があります。代わりに try_filesディレクティブ を使用します。

location = /index.php {
    # PHP options
}

location / {
    try_files /public$uri /public$uri/ /index.php?route=$uri;
}
3