2016-09-11 3 views
1

url이 아닌 이름으로 웨이브 파일을 캐시하는 타사 사이트에서 작업하고 있습니다. 내 시스템에는 동일한 이름이지만 다른 디렉토리에 많은 웨이브 파일이 있지만 같은 디렉토리 이름이지만 다른 디렉토리에있는 파일을 요청할 때는 제 3 자 사이트가 잘못된 파일을 재생합니다.Apache 다시 쓰기 규칙에서 경로 구분 기호로 문자열 다시 쓰기

URL에서 슬래시 ('/')를 제거하고 문자열 _dir_separator_과 결합하여 시스템 전체에서 웨이브 파일을 고유하게 만듭니다.

_dir_separator_의 모든 항목이 내부적으로 슬래시로 재 작성되도록 URL을 다시 작성하려면 어떻게해야합니까? 예를 들어

.이 파일 http://mysite/media_dir_separator_voice_scripts_dir_separator_script_en_v11.wav

을 요구하는이 하나 http://mysite/media/voice_scripts/script_en.wav

이 디렉토리 구조를주의 선택해야하기 때문에 패턴의 고정 번호가 작동하지 않을 것입니다 재 작성 여러 수준의 깊이입니다.

편집 : 마음이 바뀌었고 _dir_sepator_ string 대신 하이픈 (-)을 사용하고 싶습니다. 중요한 것은, 다시 쓰지 않고 작업하기 위해서입니다. 호스트 모드 - 재 작성을 사용할 수 있으며, htaccess로 파일을 설정할 수있는 기능을 제공 할 수있는 AllowOverride을 설정 한 경우

RewriteRule ^([^-]*)-([^-]*-.*) $1/$2 [N] 
    RewriteRule ^([^-]*)-([^-]*)$ $1/$2 [L] 

답변

0

, 당신은 사용할 수 있습니다 다음에 곱슬

RewriteEngine On 

RewriteCond %{REQUEST_URI} _dir_separator_ [NC] 
RewriteRule ^(.*)_dir_separator_(.+)$ /$1/$2 [R,L] 

시험이 내 시스템이 제공 :

$ curl -LI http://localhost/media_dir_separator_voice_scripts_dir_separator_script_en_v11.wav 

HTTP/1.1 302 Found 
Date: Sun, 11 Sep 2016 05:59:26 GMT 
Server: Apache/2.4.18 (Win64) PHP/7.0.4 
Location: http://localhost/media_dir_separator_voice_scripts/script_en_v11.wav 
Content-Type: text/html; charset=iso-8859-1 

HTTP/1.1 302 Found 
Date: Sun, 11 Sep 2016 05:59:26 GMT 
Server: Apache/2.4.18 (Win64) PHP/7.0.4 
Location: http://localhost/media/voice_scripts/script_en_v11.wav 
Content-Type: text/html; charset=iso-8859-1 

HTTP/1.1 404 Not Found 
Date: Sun, 11 Sep 2016 05:59:26 GMT 
Server: Apache/2.4.18 (Win64) PHP/7.0.4 
Content-Type: text/html; charset=iso-8859-1 
하이픈과 사용에 대한

(-) 체인지를 담당자 :

RewriteRule ^(.*)-(.+)$ /$1/$2 [N] 
+0

나는 마음이 바뀌었다. _dir_separate_ 대신 간단한 대시 (-)를 사용하는 것을 선호합니다. 나는 파일에 대시가 없다는 것을 확신 할 것이다. 이것을 시도했습니다 RewriteRule^([^ -] *) $ ([^ -] *) - ([^ -] * -. *) $ 1/$ 2 [N] $ 1/$ 2 [L] 하지만 작동하지 않는 것 같습니다. 리디렉션없이 작동하려면 다시 쓰기 솔루션이 필요합니다. – SenG

+0

@SenG'L' 플래그를 넣지 마십시오. – hjpotter92

+0

내 가상 파일에서 정확한 스 니펫을 사용했지만 여전히 리디렉션됩니다. 브라우저에서 새 URL을 볼 수 있습니다. – SenG

관련 문제