2017-09-05 1 views
0

리디렉션 설정에 문제가 있습니다. 특정 디렉토리에 색인 페이지가 있고, 디렉토리 이름은 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] 

. 두 번째와 세 번째 블록은 어떻게 든 병합 될 수 있습니다.

피터

+0

왜 [REFNCS? refncs?] {9}와 [REFNCSrefncs] {10}가 다른가? –

+0

첫 번째 것은 s와 S를 필요로하지 않습니다. –

답변

0

한번에 변경 :

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] 

사람 :이 작품처럼

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] 
+0

루프가 아프지 않습니다. 그러나 여전히 일치하지 않습니다 : example.com/references/abcdeF –

+0

나는 [REFNCSrefncs] {10}을 (를) 변경했습니다. 플러스는 이스케이프 된'/' –

0

가 보이는 :

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f 
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-d 
RewriteCond %{REQUEST_URI} ^(/?)([REFNCSrefncs]{10})/([a-zA-Z0-9]{6})(/?)$ 
RewriteRule ^(.*)$ example.com/rewrite.php?rewrite=example.com%{REQUEST_URI} [QSA,L,NC,R=302] 

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f 
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-d 
RewriteCond %{REQUEST_URI} ^(/?)([REFNCrefnc]{9})/([a-zA-Z0-9]{6})(/?)$ 
RewriteRule ^(.*)$ example.com/rewrite.php?rewrite=example.com%{REQUEST_URI} [QSA,L,NC,R=302] 

내가 ([REFNCSrefncs의 순서를 변경했다 ] {10})과 ([REFNCrefnc] {9}).

힌트를 보내 주셔서 감사합니다!