Nginx 특정 재 작성 [닫힘]


0

나는 nginx rewrite에서 혼란스러워합니다. 할 수 있으면 도와주세요 .. 감사합니다

xxxx.conf

#vhost-xxxxx
server {

        listen       80;
        server_name  xxxx.xxxx.com;   
        root   /var/www/html;        
        index index.php index.html index.htm;
        charset utf-8;
       access_log  logs/xxxxxx.access.log;

}

#rewrite
 if (!-e $request_filename)
{

       rewrite ^(.+)$ /cn/index.php?q=$1 last;
}

location ~ \.php$ {

        root           /var/www/html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
        include        fastcgi_params;

}

}

안녕 모두, 내 nginx가 / var / www / html 아래의 / var / www / html 루트 폴더를 가리키고 있습니다. 3 개의 폴더 cn, my, en이 있습니다

따라서 xxxxx.xxxxx.com/cn/으로 진행하면 아무런 문제가 없습니다.

그러나 xxxxx.xxxxx.com/en 또는 / my로 처리하면 403 Forbidden이 표시됩니다.

나는이 설정을 수행하기 전에 시도

#rewrite
 if (!-e $request_filename)
{

       rewrite ^(.+)$ /cn/index.php?q=$1 last;
       rewrite ^(.+)$ /en/index.php?q=$1 last;
       rewrite ^(.+)$ /my/index.php?q=$1 last;
}

그러나 cn의 경우에만 작동하고 다른 장치는 금지됩니다.

사용자가 / en에 갔다가 다시 쓰면 어떻게 만들 수 있습니까

rewrite ^(.+)$ /en/index.php?q=$1 last;

또는 내 사용자가 / my로 다시갑니다.

rewrite ^(.+)$ /my/index.php?q=$1 last;

내가 구체적으로 만들 수있는 방법

ps : // my 도메인 이름은 완전히 같습니다.

고마워, 도와 줘서 고마워


당신은 }이전 #rewrite에 의심 스러웠지만 아마도 오타 일 것입니다.
Richard Smith

답장을 보내 주셔서 감사하지만 여기에 언급 한 구성 파일에는 오타가 없습니다. btw,
thank

답변:


1

세 가지 다시 쓰기 규칙은 동일한 정규식을 가지므로 첫 번째 규칙 만 실행됩니다. 난 당신이 사용하는 것이 좋습니다 것입니다 locationtry_files대신 지시 if하고 rewrite.

server {
    listen       80;
    server_name  example.com;
    charset utf-8;
    access_log  logs/xxxxxx.access.log;

    root   /var/www/html;

    index index.php;
    location = / { return 301 /cn/; }

    location / {
        try_files $uri $uri/ /cn/index.php?q=$uri;
    }
    location /en {
        try_files $uri $uri/ /en/index.php?q=$uri;
    }
    location /my {
        try_files $uri $uri/ /my/index.php?q=$uri;
    }
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass   127.0.0.1:9000;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
    }
}

참고 : PHP 위치 블록에서 일부 지시문을 제거하고 순서를 변경했습니다.

위의 내용을 정규식으로 결합하려는 경우 (비효율적이지만 확장 가능할 수 있음) :

server {
    listen       80;
    server_name  example.com;
    charset utf-8;
    access_log  logs/xxxxxx.access.log;

    root   /var/www/html;

    index index.php;
    location = / { return 301 /cn/; }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass   127.0.0.1:9000;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
    }
    location ~ "^(?<lang>/\w{2})/" {
        try_files $uri $uri/ $lang/index.php?q=$uri;
    }
}

지시문 목록 과 설명서 는 내용을 참조하십시오 nginx.

편집 : 추가 된 index두 예에 지시자를 location =제 1 실시 예에와 $uri/의 각각에 try_files두 예이다. try_files완전성을 위해 PHP 위치에 추가 되었습니다.


와우, 구성의 첫 번째 예제와 완벽하게 작동하지만이 구성을 적용한 후 다른 문제가 발생합니다. example.com/en/wp-admin에 액세스 할 수 없습니다 ... 어떻게 수행 할 수 있습니까?
JohnsonGoey

@ JohnsonGoey 답변을 업데이트하고 색인을 다시 넣었습니다. 답변 하단의 편집을 참조하십시오. 추가 index.html하고 index.htm사용하는 경우 추가하십시오 .
Richard Smith

당신은 절대적으로 훌륭합니다, 모든 일이 끝났습니다 ~ 너무 감사합니다 ... 많이 감사합니다.
JohnsonGoey
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.