>  Q&A  >  본문

프록시 전달 지시문을 사용하여 NGINX를 다시 작성하면 제대로 작동하지 않습니다.

저는 현재 이전 Symfony 버전(2.8에서 3.4로 업그레이드 중)에서 실행되는 레거시 API를 개발 중입니다.

애플리케이션에는 두 개의 "기본" PHP 진입점이 있습니다. app_dev.phpapp.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 / 块和似乎无法使重定向正常工作。我尝试过使用 breaklast 했는데 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/으로 재작성하는 것입니다. /경로?

P粉063862561P粉063862561306일 전368

모든 응답(1)나는 대답할 것이다

  • P粉642920522

    P粉6429205222024-01-11 14:13:15

    重写/app_dev.php/(.*) /app.php break;,但break是错误的标志 - 您需要使用<强>最后。请参阅rewrite명령을 사용해 보세요.


    또는 POST 요청을 리디렉션하려면 307 상태 응답을 사용할 수 있습니다. 예:

    으아아아

    블록을 location ~ .php$블록 위에 배치하세요.

    알았어location ~ ^/app.php(/|$) 块被标记为 internal,这会阻止您的服务器响应 的外部请求>/app.php. 이는 귀하의 질문에 있는 일부 진술과 모순되는 것 같습니다.

    회신하다
    0
  • 취소회신하다