동일한 사이트 내에서 문제를 일으키는 몇 가지 수정 사항과 추가 소프트웨어가 있는 vBulletin 포럼에 대한 nginx 재작성 규칙을 정리하려고 합니다. 나는 일이 제대로 작동하고 있지만nginx If is Evil걱정이 되어서 대신 이러한 몇 가지 규칙을 try_files로 변환해 보고 싶습니다.
현재는
정적 이미지 및 파일에 대한 규칙으로 SEO 모드(예: .gif,.ico, 심지어 .css)로 전달되지 않습니다.
tapatalk 플러그인이라고도 불리는 하위 폴더 mobiquo에 대한 규칙입니다. 이것이 작동하려면 전체 디렉토리를 다시 쓰기에서 제외해야 했습니다.
파일이 존재하지 않는 경우. 그것이 얼마나 중요한지는 잘 모르겠지만 좋은 생각인 것 같습니다. 어쩌면 SEO 모드의 작업량을 낮추기 위한 것일 수도 있습니다.
명백히 위험한 If 블록 형식의 nginx 재작성 규칙은 다음과 같습니다.
이것은 우선순위를 부여하고 싶었기 때문에 /forum/ 블록 위에 있습니다. 이것이 부적절하게 수행된 경우 알고 싶습니다.
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
# Some basic cache-control for static files to be sent to the browser
expires max;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
location /forum/ {
try_files $uri $uri/ /forum/dbseo.php?$args;
if ($request_uri ~* ^/forum/mobiquo) {
break;
}
if (-f $request_filename) {
expires 30d;
break;
}
if ($request_filename ~ "\.php$" ) {
rewrite ^(/forum/.*)$ /forum/dbseo.php last;
}
if (!-e $request_filename) {
rewrite ^/forum/(.*)$ /forum/dbseo.php last;
}
}
끝
내 검색 어딘가에서 적응하려고 시도한 템플릿을 찾았지만 정규식을 이해하지 못하기 때문에 실패했습니다. :)
위치 / {
# if you're just using wordpress and don't want extra rewrites
# then replace the word @rewrites with /index.php
try_files $uri $uri/ /index.php;
}
위치 @rewrites {
# Can put some of your own rewrite rules in here
# for example rewrite ^/~(.*)/(.*)/? /users/$1/$2 last;
# If nothing matches we'll just send it to /index.php
try_files $uri $uri/ /forum/dbseo.php?$args;
^ /index.php를 마지막으로 다시 작성하세요.
^(/.php)$ /forum/dbseo.php를 마지막으로 다시 작성하세요.
}
답변1
질문을 정리하려고 노력하세요. 특히 질문의 마지막 부분에서는 코드를 제공하는 대신 소리를 지르게 됩니다.
질문 상단에 제공한 구성을 바탕으로 다음과 같이 결론을 내렸습니다.
location /forum/ {
index dbseo.php; # You obviously wish to send everything erroneous/inexistent to dbseo.php, any index.php file would suffer the regex location below
try_files $uri $uri/ /forum/dbseo.php?$args; # Any inexistent file/directory will be handled over to /forum/dbseo.php
location ^~ /forum/dbseo.php { # Avoids matching the regex location below (performance)
}
location ^~ /forum/mobiquo { # Avoids matching any other rules
}
location ~* \.php$ {
try_files /forum/dbseo.php =404;
# Be careful here, try to secure your location since the regex can still be manipulated for arbitrary code execution
}
}
중첩된 위치는 잠재적으로 충돌하는 위치 블록을 격리하는 데 유용합니다. 정규식 위치는 순차적으로 평가되므로 위치 블록 순서가 영향을 미치는 것을 방지하려면(Apache 구성과 마찬가지로 혼란스럽습니다) 정규식 위치 중 여러 개가 서로 뒤따르는 것을 방지하기 위해 항상 정규식 위치를 접두사 1로 묶어야 합니다.
당신은에 대해 배울 수 있습니다location
설명서 페이지의 수정자.
어쩌면 더 많은 세부 정보가 있을 수도 있지만 제 예에는 필요한 기본 정보가 모두 들어 있습니다. 귀하의 필요에 더 잘 맞도록 이를 이해/개선하는 것은 귀하의 몫입니다. :영형)