RewriteRule 충돌 및 후행 슬래시

RewriteRule 충돌 및 후행 슬래시

우리는 웹사이트를 cPanel 인프라로 마이그레이션하고 있습니다. 고객은 Nginx를 사용하여 자신의 인프라에서 웹사이트를 호스팅했습니다. 그는 Nginx 구성 파일을 우리에게 보냈고 우리는 이를 Apache Rewrite 규칙으로 변환했습니다. 최종 결과(관련 행만 표시)는 다음과 같습니다.

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ouvidoria/$ /ouvidoria/index.php
RewriteRule ^([^/\.]+)/?$ index.php?id=$1 [L]
RewriteRule ^news\/(.*)/?$ noticias.php?id=$1 [L]

한 페이지를 제외하고 모든 것이 예상대로 작동합니다 /ouvidoria. 이 특정 페이지에는 public_html에 동일한 이름의 디렉터리가 있으므로 RewriteRule은 해당 ouvidoria/index.php파일을 가리킵니다. 문제는 어떤 이유에서인지 우리가 /ouvidoriaURL에 액세스할 때 로 리디렉션된다는 것 입니다 /ouvidoria/?id=ouvidoria. 이는 두 번째 규칙에 해당하는 것 같습니다. 그래서 이것이 해결해야 할 첫 번째 문제입니다.

두 번째는 후행 슬래시( /ouvidoria/)를 사용하여 URL에 접근할 수 있고 추가되지 않는다는 점 ?id=ouvidoria입니다. 그러나 웹사이트는 URL에 따라 사이드 메뉴가 로드되는 방식으로 개발되었습니다. 뒤에 슬래시 없이만 로드됩니다. 첫 번째 문제에서 문제가 있는 규칙을 제거하더라도(다른 페이지에서 필요하기 때문에 해결책이 아님) /ouvidoria로 리디렉션되어 /ouvidoria/메뉴를 로드하지 못합니다.

이러한 규칙을 적용하는 방법에 대한 도움을 주시면 감사하겠습니다.

편집하다:

남아 있는 유일한 문제는 에서 로 리디렉션하는 것 /ouvidoria입니다 /ouvidoria/. 네트워크 탭 스크린샷:

네트워크 탭

리디렉션 세부정보:

리디렉션 세부정보

답변1

"하위 디렉터리로 리디렉션" 문제를 해결하기 위해 답변을 업데이트했습니다. 다음 지시문 세트를 시도해 보십시오.

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ouvidoria/?$ /ouvidoria/index.php [L]
RewriteRule ^([^/\.]+)/?$ index.php?id=$1 [L]
RewriteRule ^news\/(.*)/?$ noticias.php?id=$1 [L]

을 제거하면 RewriteCond %{REQUEST_FILENAME} !-dApache는 요청된 리소스가 있는 디렉터리가 있는지 확인하지 않습니다. 이는 문제 해결에 도움이 될 수 있습니다.


원래 답변:

Apache 규칙을 사용한 지 꽤 시간이 지났지만 다음 변경 사항이 목표 달성에 도움이 될 것이라고 생각합니다.

바꾸다

RewriteRule ^ouvidoria/$ /ouvidoria/index.php

~와 함께

RewriteRule ^ouvidoria/?$ /ouvidoria/index.php [L]

규칙의 원래 버전은 /ouvidoria/URI와만 일치합니다. 따라서 요청이 두 번째에 도달하면 RewriteRule설명한 것과 같은 동작이 발생합니다.

규칙의 수정된 버전은 /ouvidoria/및 모두와 일치합니다 /ouvidoria.

답변2

글쎄, 어떤 이유에서인지 DirectorySlash Off이제 이 지시문이 작동했습니다. 이전에 이미 설정을 시도했지만 오류 500이 발생했습니다. 해당 규칙을 여러 번 다시 작성했으며 아마도 DirectorySlash와 충돌하는 항목을 제거했고 이제 해당 지시문이 예상대로 작동하고 있을 것입니다.

또한 첫 번째 문제를 해결하는 데 도움을 준 @Tero Kilkanen에게도 감사드립니다.

관련 정보