2008-11-24 7 views
5

이 주제에 대한 많은 정보가 없으므로 특정 문제를 개략적으로 설명하고 질문과 답변을 좀 더 보편적으로 구체화 할 수 있습니다.Mod-rewrite Trailing Slash 문제

나는이 URL 오전 데 문제가 이것

http://example.com/location/index.php?franchise=kings-lynn 

속으로

http://example.com/location/kings-lynn 

에게 변화를하다이 재 작성 규칙

RewriteEngine On 
RewriteBase /bookkeepers/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)/?$ index.php?franchise=$1 

이 그 나는 뒤에를 추가하는 경우 슬래시

http://example.com/location/kings-lynn/ 

다음 쿼리 문자열은

franchise=kings-lynn/ 

로하고로드하는 내 CSS와 자바 스크립트 파일의 몇 가지 이유 없음 반환됩니다.

아이디어가 있으십니까?

+0

정규식 일치에 대한 답변을 게시했습니다. CSS/Javascript 문제를 해결하려면 서버 로그를보고 요청 된 내용을 확인해야합니다. 해당 RewriteRule에 [R, L]을 추가해야 할 수도 있지만 그 부분을 결코 이해하지 못했습니다. –

답변

10

@Paul Tomblin이 말했듯이. +는 탐욕 스럽습니다. 즉, 최대한 일치하는 것입니다.

^(.+[^/])/?$은 /와 일치하지 않는 문자 다음에 /가오고 그 다음에 /가 오는 것을 나타냅니다. 이것은 후행 /을 포착하지 않는 효과가 있습니다.

CSS와 자바 스크립트가 작동하지 않는 가장 큰 이유는 src = "my.js"와 같은 상대 경로를 사용하고 있기 때문입니다. 후행 슬래시가 있으면 디렉토리처럼 보이므로 브라우저가 /location/kings-lynn/my.js를 찾을 것입니다. 파일의 절대 경로 (예 : /location/my.js)를 사용하면이 문제를 간단하게 해결할 수 있습니다.

6

(. +)가 욕심이 일치하는 것처럼 보입니다. 이 경우 시도해 볼 수 있습니다

RewriteRule ^(.+[^/])/?$ index.php?franchise=$1 

이렇게하면 첫 번째 그룹 (괄호 안에)이 슬래시로 끝나지 않습니다.

+0

니스. 이것은 내 후행 슬래시 문제 (CSS 문제의 부족이 아닌)를 수정했습니다. 이 작품의 작동 방식에 대해 이야기 할 수 있다고 생각하지 마십시오. – Binarytales

+0

정규식은 하나 이상의 문자로 구성된 그룹과 일치하며 그 뒤에 슬래시 이외의 문자가옵니다. 그룹 밖에서는 선택적으로 슬래시와 일치합니다. 변경하기 전에 그룹에서 슬래시가 종료되었을 수 있습니다. –

관련 문제