지금이 구성이 있습니다.
location ~ ^/phpmyadmin/(.*)$
{
alias /home/phpmyadmin/$1;
}
그러나 방문하면 www.mysite.com/phpmyadmin
(후행 슬래시가 없음) 404를 찾고있는 것을 찾지 못합니다. 후행 슬래시를 포함하지 않기 때문에 가정합니다. 이 문제를 어떻게 해결할 수 있습니까?
지금이 구성이 있습니다.
location ~ ^/phpmyadmin/(.*)$
{
alias /home/phpmyadmin/$1;
}
그러나 방문하면 www.mysite.com/phpmyadmin
(후행 슬래시가 없음) 404를 찾고있는 것을 찾지 못합니다. 후행 슬래시를 포함하지 않기 때문에 가정합니다. 이 문제를 어떻게 해결할 수 있습니까?
답변:
사용중인 정규 표현식에있을 수 있습니다.
location ~ ^/phpmyadmin/(.*)$
위의 내용은 / phpmyadmin /, / phpmyadmin / anything / else / here와 일치하지만 정규식에 슬래시가 포함되어 있기 때문에 / phpmyadmin과 일치하지 않습니다.
아마도 다음과 같은 것을 원할 것입니다 :
location ~ /phpmyadmin/?(.*)$ {
alias /home/phpmyadmin/$1;
}
물음표는 정규식 수량 자이며 nginx에 이전 문자 중 하나 또는 슬래시와 일치하도록 지시해야합니다.
경고 : 커뮤니티는이 솔루션을 가능한 보안 위험으로 간주했습니다.
더 나은 솔루션 :
location ~ ^/phpmyadmin(?:/(.*))?$ {
alias /home/phpmyadmin/$1;
}
서버에 /home/phpmyadmin
먼저 권한이 있는지 확인하십시오 .
허용되는 답변과의 차이점 설명 :
그것은 정규 표현식 에 관한 것 입니다.
우선, ^
char은 문자열의 시작 부분부터 일치하고 중간 어딘가가 아니라는 것을 의미합니다. $
문자열의 끝과 일치하는 최종 수단에서.
(?:)
수단은 비 캡처 그룹을 - 우리는 캡처 결과에 그것을 원하지 않지만, 우리는 간단한 그룹 일부 문자로합니다. 우리는 /
char을 부모 경로의 중요한 부분이 아닌 자식 경로의 중요하지 않은 부분으로 만들고 싶기 때문에 이렇게 그룹화합니다 .
왜 그냥 사용하지 않습니까
location /phpmyadmin {
alias /home/phpmyadmin;
}
?
alias
지시문에 슬래시없이 시도 했습니까 ?
/phpmyadminblahblahblahblah
또는 다른 조합 에서도 일치한다는 것입니다
나는 이것이 오래된 질문이라는 것을 알고 있지만 Google을 통해 여기서 끝나는 사람은 다음과 같은 방법으로 해결했습니다 (@kbec의 변형, 꽤 좋았습니다).
location ~ ^/foo(/.*)?$ {
proxy_pass http://$backend$1$is_args$args
}
이렇게하면 변형을 캡처 하여 다른 URL (매개 변수 포함)로 /foo
리디렉션합니다 /bar
. proxy_pass
지시어로 표시하고 있지만 작동합니다 alias
.
/foo
-> /bar
/foo/
-> /bar/
/foo/sub
-> /bar/sub
/foo/sub1/sub2/?param=value
-> /bar/sub1/sub2/?param=value
$1
선택적으로 하위 리소스와 선행 슬래시를 캡처하므로과 같은 것을 캡처하지 않기 때문에 작동합니다 /fooextra/
. 또한 현재 또는 존재하지 않는 종료 슬래시를 올바르게 리디렉션합니다.
이 리디렉션은 뒤에 슬래시가 있거나없는 URL 만 다시 작성합니다. 슬래시 뒤에 오는 것은 덮어 쓰지 않습니다.
domain.com/location => domain.com/new/location으로 리디렉션 domain.com/location => domain.com/new/location으로 리디렉션 domain
> com / location / other => 리디렉션
되지 않음
server {
# 301 URL Redirect
rewrite ^/location/?$ /new/location permanent;
}