리디렉션 설정에 문제가 있습니다. 특정 디렉토리에 색인 페이지가 있고, 디렉토리 이름은 ABCDEF와 같이 간단한 여섯 자의 긴 토큰입니다. 이름은 영숫자와 모두 대문자입니다. 내가 원래 원했던 것은 모든 트래픽, 토큰이 들어있는 소문자와 대문자를 올바른 디렉토리로 전달하는 것이 었습니다. mod_speling과 같은 서버 모듈에 액세스 할 수 없으므로 PHP 스크립트를 사용하여 실제 URL을 다시 작성합니다. 그것은 작동합니다..htaccess 조건부 재 작성/리디렉션
example.com/ABCDEF
example.com/abcdef
example.com/reference/abcDEF
example.com/referENces/ABCdeF
디렉토리로 : 하지만 내가 좋아하는 모든 트래픽을 직접, 한 단계를 추가하고 싶었
example.com/references/ABCDEF/
나는이 일을 얻을 수 없었다, 내 리디렉션 루프에서 얻는 모든 시간. 내 htaccess로에서 무엇을 가지고
: 나는 더 나은, 더 일반적인 정규 표현식 솔루션이 있어야합니다 확신이 시점에서
# takes care of: example.com/abcdef
RewriteCond %{DOCUMENT_ROOT}/references/%{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI} ^(/?)([a-zA-Z0-9]{6})(/?)$
RewriteRule ^(/?)([a-zA-Z0-9]{6})(/?)$ example.com/rewrite.php?rewrite=example.com%{REQUEST_URI} [QSA,L,NC,R=302]
# takes care of example.com/reference/abcDEF
RewriteCond %{REQUEST_URI} ^(/?)([REFNCS?refncs?]{9})/([a-zA-Z0-9]{6})(/?)$
RewriteRule ^(/?)([REFNCS?refncs?]{9})/([a-zA-Z0-9]{6})(/?)$ example.com/rewrite.php?rewrite=example.com%{REQUEST_URI} [QSA,L,NC,R=302]
# this should take care of: example.com/references/abcDEF , but if I uncomment it, we end up in a loop
#RewriteCond %{REQUEST_URI} ([REFNCSrefncs]{10})/([a-zA-Z0-9]{6})(/?)$
#RewriteRule ([REFNCSrefncs]{10})/([a-zA-Z0-9]{6})(/?)$ example.com/rewrite.php?rewrite=example.com%{REQUEST_URI} [QSA,L,NC,R=302]
# Finally this handles: example.com/ABCDEF
RewriteCond %{DOCUMENT_ROOT}/references/%{REQUEST_URI} -d
RewriteCond %{REQUEST_URI} ^(/?)([a-zA-Z0-9]{6})(/?)$
RewriteRule ^(/?)([a-zA-Z0-9]{6})(/?)$ example.com/references%{REQUEST_URI} [QSA,L,NC,R=302]
. 두 번째와 세 번째 블록은 어떻게 든 병합 될 수 있습니다.
피터
왜 [REFNCS? refncs?] {9}와 [REFNCSrefncs] {10}가 다른가? –
첫 번째 것은 s와 S를 필요로하지 않습니다. –