저는 현재 이전 Symfony 버전(2.8에서 3.4로 업그레이드 중)에서 실행되는 레거시 API를 개발 중입니다.
애플리케이션에는 두 개의 "기본" PHP 진입점이 있습니다. app_dev.php
和 app.php
。 _dev
이 엔드포인트는 개발 환경에서만 사용해야 하지만 이전 프로덕션 애플리케이션에서는 잘못 사용됩니다.
이 파일이 노출되지 않도록 API를 쉽게 수정할 수 있지만(성공적으로 수정했습니다), API에 연결된 일부 애플리케이션을 쉽게 업데이트할 수는 없습니다. 예를 들어 일부 앱은 여전히 https://domain/app_dev.php/the/path
를 사용하여 연결을 시도하고 있습니다.
API를 사용하는 애플리케이션을 수정하는 동안 임시 해결책으로 https://domain/app_dev.php/the/path
重写为 https://domain/app.php/the/path
或者更好的是 https://domain/the/path
를 https://domain/app.php/the/path
또는 더 나은 < code>https로 다시 작성하고 싶습니다. ://도메인/the/경로. 우리는 다시 작성하는 것이 올바른 선택이라고 믿지만 어쩌면 우리가 옳지 않을 수도 있습니까?
현재 NGINX 구성은 다음과 같습니다.
으아악 으아악추가하려고 rewrite /app_dev.php/(.*) /app.php break;
添加到各个地方,包括主 server
块和 location /
块和似乎无法使重定向正常工作。我尝试过使用 break
和 last
했는데 API에서 콘텐츠 없이 500개의 응답만 받았습니다.
업데이트하면 location ~ ^/app.php(/|$) {
到 location ~ ^/(app|app_dev).php(/|$) {
잘 작동하므로 API가 NGINX 뒤에서 "작동"한다는 것을 알 수 있습니다.
POST 요청도 다시 작성해야 하므로 여기서는 301 리디렉션이 작동하지 않는다는 점을 언급하고 싶습니다. 그러나 이를 301 리디렉션으로 테스트한 결과 예상한 결과를 얻었습니다(그러나 301은 POST 요청에 대해 작동하지 않습니다).
으아악방해하도록 설정한 경우:
으아악지속되도록 설정한 경우:
으아악그래서 제 질문은 이 재작성이 작동하도록 하는 방법입니다. https://domain/app_dev.php/the/path
等 URL 重写为 https://domain/app.php /the/path
甚至更好 https://domain/the/path
와 같은 URL을 https://domain/app.php /the/path
또는 더 나은 https:// domain/으로 재작성하는 것입니다. /경로
?
重写/app_dev.php/(.*) /app.php break;
,但break是错误的标志 - 您需要使用最后强>。请参阅rewrite
명령을 사용해 보세요. p>또는 POST 요청을 리디렉션하려면 307 상태 응답을 사용할 수 있습니다. 예:
으아아아블록을
location ~ .php$
블록 위에 배치하세요.알았어
location ~ ^/app.php(/|$)
块被标记为internal
,这会阻止您的服务器响应的外部请求>/app.php
. 이는 귀하의 질문에 있는 일부 진술과 모순되는 것 같습니다.