이 매우 간단한 .htaccess를 Nginx로 변환하는 방법은 무엇입니까?

May 20 2019

.htaccessURL 다음에 모든 것을 전달 하는 이것을 사용 $param하고 있으므로 example.com/news/idPHP로 $_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;
}

(웹앱이 손상되어 /URI 의 선행 을 처리 할 수없는 경우 가능한 경우 웹앱을 수정하거나 그렇지 않은 경우이 질문을 참조 하세요 .)

1 SandroBenevides May 21 2019 at 01:15

다음 규칙을 사용하여 수정할 수 있습니다.

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

내부 지침이없는 위치 / {}가있는 경우 제거합니다.