2010-02-03 4 views
5
내가 선택적 후행 forwardslash을 포함 할 필요가

, 즉이 /가의 옵션 슬래시 필요htaccess로 정규 표현식 앞으로 후행 만들어 내 RewriteRule의에서,

내가 지금까지 가지고하는 것은 잘 작동

RewriteRule ^([a-zA-Z0-9]+)$ u.php?$1|$2 

입니다 예를 들어 http://foo.bar/abcdehttp://foo.bar/u.php?abcde으로 리디렉션되고 존재할 수있는 쿼리 문자열 매개 변수를 처리합니다. 내가해야 할 일은

http://foo.bar/abcde/ (후행 forwardslash으로) 받아 http://foo.bar/u.php?abcde

그래서, 현재의 경우, 내 RewriteRule의 년에 $ 1의 최종 슬래시를 제거 필요에 리디렉션합니다. 어떻게해야합니까? 나는 아파치에 익숙하지 않고 많은 다른 정규식 규칙을 시도했지만 올바르게 할 수는 없다.

답변

14

은 그냥 패턴 끝에 $ 전에 /?을 넣어 :

RewriteRule ^([a-zA-Z0-9]+)/?$ u.php?$1 

그러나 나는 다른 하나는 당신이 (또는 슬래쉬없이 중) 하나 개의 철자를 할 수 있도록 제안하고 재 오히려 것 :

# remove trailing slash 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*)/$ /$1 [L,R=301] 
# add trailing slash 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .*[^/]$ /$0/ [L,R=301] 
+0

@ 필 : 아니요, 불가능합니다. 당신이 할 수있는 유일한 일은 그것을 제거하거나 모든 요청에 ​​그것을 추가하는 것입니다. – Gumbo

+0

실제로 내가 성취하고자하는 것은 두 가지 철자를 허용하는 것이 더 합리적입니다. 따라서 'RewriteCond'로 제안한 것을 완전히 이해할 때까지 지금 두 가지 다시 쓰기 규칙을 사용할 것입니다. – Phil

+1

@Phil : 두 가지 조건은 기존 디렉토리 ('-d') 또는 기존 파일 ('-f')에 매핑 할 수있는 요청을 리디렉션하지 않는 것입니다. – Gumbo