문제

이것은 매우 이상한 문제이며, 나는 그것을 명확하게 설명 할 수 있기를 바랍니다.

기본적으로 우리는 오늘 클라이언트 사이트에 대한 주요 업데이트를 만들었고, 새로운 구조를 수용하기 위해 htaccess의 일부 재 작성 규칙을 업데이트해야했습니다 ...

그래서 우리는 원래 다음과 같은 것을 가지고있었습니다.

RewriteRule ^/resources/?$  index.php?id=resources
RewriteRule ^/media/?$      media.php

우리는 다음으로 변경되었습니다.

RewriteRule ^/resources/?$  index.php?id=resources
RewriteRule ^/media/?$      index.php?id=media

그러나 우리가 방문했을 때 http://www.example.com/media - 이전 미디어 페이지를 표시하고있었습니다. 그런 다음 문서 루트에서 Old Media.php를 제거하면 404를 얻었습니다. 어딘가에 여전히 Media.php에 매핑 /미디어가 있으며 재 작성 규칙을 무시합니다.

이상한 점은 - 파일의 다른 모든 다시 쓰기 규칙이 잘 작동한다는 것입니다. 거기에는 약 20 정도가 있습니다.

우리는 Vhost 및 기타 구성 파일을 위아래로 추적했지만 미디어 또는 다른 파손 리디렉션 (총 3 개)에 대한 참조를 찾을 수 없으므로 혼란스러워합니다.

도움이 되었습니까?

해결책 2

사이트에서 MultiViews 옵션을 비활성화하면 문제가 해결되었습니다.이 문제는 다시 작성된 규칙 전에 처리중인 컨텐츠 협상을 가능하게하는 것 같습니다.

다른 팁

나는 이것이 acceptinfo 때문일 것이라고 강력히 의심되는데, 내 견해로는 아파치의 잘못된 기능이다. 기본적으로 PHP가 핸들러 인 위치가 켜져 있다고 생각합니다.

.htaccess 또는 바람직하게는 httpd.conf (및 다시 시작)에 추가하십시오.

AcceptPathInfo Off

보다: http://httpd.apache.org/docs/2.2/mod/core.html#acceptinfo

--

몇 가지 측면 지점 :

매치를 찾았을 때 다시 쓰기가 [L]로 끝나도록해야합니다. 디버깅에 도움이됩니다. 예 :

RewriteRule ^/media/?$      index.php?id=media [L]

또한 유사한 규칙을 결합하여 규칙 수를 줄일 수 있습니다. 예 :

RewriteRule ^/(media|resources)/?$  index.php?id=$1 [L]

개인적으로 나는 /의 사용을 생각합니까? 전반전이 끝날 때는 양호하지 않습니다. 왜냐하면 두 URL이 리디렉션없이 작동한다는 것을 의미하기 때문입니다. 즉, '올바른'결정적인 것이 없음을 의미합니다. 개인적으로 나는 사용합니다 :

RewriteRule ^/(media|resources)/$  index.php?id=$1 [L]
RewriteRule ^/(media|resources)$ /$1/ [L,R]

다시 말해, 고유 한 자원에는 단일의 표준 (정의) URL이 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top