2017-12-05 13 views
0

trailin 슬래시가없는 모든 URL을 301로 리디렉션하고 후행 슬래시가있는 동일한 URL로 리디렉션하려고합니다. 또한 substitude 모든 URL을 index.php, 폴더 또는 파일이 아닌 경우 싶습니다. nginx는 index.php에 후행 슬래시 및 하위 입력으로 리디렉션합니다 (파일 및 폴더가없는 경우)

나는 다음 코드를 사용하여이 만들려고 :

location/{ 
    try_files $uri $uri/ /index.php$is_args$args; 
} 

location ~* .*[^/]$ { 
    try_files $uri $uri/ permanent; 
} 

location ~ \.php$ { 
    include snippets/fastcgi-php.conf; 
    fastcgi_pass unix:/run/php/php7.0-mysite-fpm.sock; 
    fastcgi_read_timeout 300; 
} 

우선 위치가 완벽하게 혼자 작업하지만,이 위치가 함께 작동하지 않습니다. 그것은 일반적으로 파일과 폴더를 반환하지만 슬래시없이 요청 URL을 nginx 500 오류를 반환하고 다운로드 index.php 파일을 반환 할 때, 후행 슬래시와 함께 URL을.

location/{ 
    try_files $uri $uri/ @addslash /index.php$is_args$args; 
} 
location @addslash { 
    rewrite ^(.+[^/])$ $1/ permanent; 
} 
location ~ \.php$ { 
    include snippets/fastcgi-php.conf; 
    fastcgi_pass unix:/run/php/php7.0-mysite-fpm.sock; 
    fastcgi_read_timeout 300; 
} 

을하지만 끝에 슬래시없이 URL의 모든 재 지정없이 작동 :

또한 나는 코드로 만들기 위해 노력했다.

후행 슬래시 및 하위 튜토리얼 모두 index.php로 리디렉션하도록하려면 어떻게해야합니까?

답변

0

해결책을 찾았습니다. 악의적 인 경우 나쁜 습관을 사용하지만 작동 코드 일뿐입니다. 그래서 어떤 것이 더 나은 workig 결정을 보여 주면, 나는 감사 할 것입니다.

set $my_var 0; 
if (-f $request_filename) { 
    set $my_var 1; 
} 
if (-d $request_filename) { 
    set $my_var 1; 
} 
if (-d $request_filename) { 
    set $my_var 1; 
} 
if ($request_uri ~ "^.*/market/cart$") { 
    set $my_var 1; 
} 
if ($request_uri ~ "^.*/market/order/accept$") { 
    set $my_var 1; 
} 
if ($request_uri ~ "^.*/market/order/status$") { 
    set $my_var 1; 
} 
if ($request_uri ~* "(.+)\.(?:\d+)\.(js|css|png|jpg|jpeg|gif)$") { 
    set $my_var 1; 
} 

if ($my_var = 0) { 
    rewrite ^(.*[^/])$ $1/ permanent; 
} 

if ($request_uri ~* "^(.*/)index\.php$") { 
    return 301 $1; 
} 


location ~* (.+)\.(?:\d+)\.(js|css|png|jpg|jpeg|gif)$ { 
    try_files $uri $1.$2; 
} 

location/{ 
    try_files $uri $uri/ /index.php$is_args$args; 
} 

location ~ \.php$ { 
    include snippets/fastcgi-php.conf; 
    fastcgi_pass unix:/run/php/php7.0-newstom-fpm.sock; 
    fastcgi_read_timeout 300; 
}