2016-11-30 1 views
1

리디렉션 htaccess로 :아파치 내가 htaccess로 파일에이 규칙을 작성한 파일

# Rewrite super sized ciim5 images to large 
    RewriteCond %{REQUEST_FILENAME} -f 
    RewriteRule ^ciim5/([0-9]+)/([0-9]+)/super_000000\.jpg$ /ciim5/$1/$2/large_000000.jpg [NC,L,R=301] 

무엇을해야하는 경로 /ciim5/123/456/super_000000.jpg이 요청 될 때, 그것은 (301)가 동일한 경로로 리디렉션하지만 large_000000.jpg를 제공한다입니다 대신. 두 super_0000000.jpglarge_000000.jpg 내가 내 로컬 호스트에서이 규칙을 시도했습니다

(효과적으로 우리가 공중에서 슈퍼 크기의 이미지를 숨기고 대규모로 리디렉션 할) 해당 서버의 실제 물리적 파일입니다 (아파치/2.4.7 (우분투)) 그리고 작동했습니다. (나머지 .htaccess 파일은 프로덕션과 동일합니다.) 하지만 프로덕션 서버 (Apache/2.4.18 (Ubuntu))에 업로드하면 아무 것도하지 않습니다. 그러나 이전에 기존의 다시 쓰기가 작동합니다 (= mod_rewrite가 사용 가능합니다). .htaccess 파일이 프로덕션 사이트에서 업데이트되었는지 확인하고 test.html 파일을 만들어 브라우저에서 열어 올바른 디렉토리에 파일을 업로드하고 있는지 확인했습니다.

지금 내 머리를 긁적 인 채 앉아 있는데, 누군가가 프로덕션 서버에서 작동하지 않는 이유와 리디렉션을 수행하는 방법을 말해 줄 수 있습니까?

편집 : 경로 /ciim5은 실제로 웹 루트에없는 디렉토리의 별칭으로 설정됩니다. 그래서 이것은 웹 루트의 .htaccess 파일이 읽히지 않을 수 있습니까? .htaccess 파일을/ciim5 디렉토리에 넣어야합니까?

편집 2 :

[Thu Dec 01 10:05:48.444800 2016] [rewrite:trace1] [pid 4572] mod_rewrite.c(476): [client *:33116] * - - [*.org.uk/sid#7f767fb185c8][rid#7f767fa9c0a0/initial] pass through /ciim5/295/491/super_000000.jpg 
[Thu Dec 01 10:05:48.445015 2016] [rewrite:trace3] [pid 4572] mod_rewrite.c(476): [client *:33116] * - - [*.org.uk/sid#7f767fb185c8][rid#7f767fa9c0a0/initial] [perdir /static-media/] strip per-dir prefix: /static-media/295/491/super_000000.jpg -> 295/491/super_000000.jpg 
[Thu Dec 01 10:05:48.445113 2016] [rewrite:trace3] [pid 4572] mod_rewrite.c(476): [client *:33116] * - - [*.org.uk/sid#7f767fb185c8][rid#7f767fa9c0a0/initial] [perdir /static-media/] applying pattern '^(ciim5/[0-9]+/[0-9]+/)super_000000\\.jpg$' to uri '295/491/super_000000.jpg' 
[Thu Dec 01 10:05:48.445204 2016] [rewrite:trace1] [pid 4572] mod_rewrite.c(476): [client *:33116] * - - [*.org.uk/sid#7f767fb185c8][rid#7f767fa9c0a0/initial] [perdir /static-media/] pass through /static-media/295/491/super_000000.jpg 

새로운 기능이 "스트립 당 디렉토리 접두사"일 : 사용 기록이 보여? ciim5 또는 static-media (ciim5가 앨리어싱 된 실제 폴더)를 제거하는 것처럼 보입니다. 그래서 나는 실제로 내 재 작성에서 ciim5 부분을 제거해야합니까?

내 웹 루트가 /var/www/*.org.uk에 있습니다

+0

다시 쓰기 모듈 ([LogLevel] (https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging))의 디버그 로그를 확인하십시오. 두 서버에서. 차이점이 있습니까? –

+0

@DavidDuponchel 확인 ** 수정 2 **, 감사합니다! – Beebee

답변

0

그래서 여기에 내가해야 할 일을했을거야. 그러나 미디어 파일은 루트 디렉토리의 /static-media에 있습니다. 내가 /static-media.htaccess 파일을 넣고 다음 지시문 넣어했다 :

RewriteRule ^([0-9]+/[0-9]+/)super_000000\.jpg$ /ciim5/$1large_000000.jpg [NC,L,R=301] 

는 요청이 아파치에 관해서 것 같다을의 strip per-dir prefix이 (! 나는 이것이 무엇인지 모르는)을 제거하는 것/정전기에 미디어 및/ciim5 디렉토리 접두사가 없으므로/static-media에서 수신되는 요청 (/ciim5/123/456/super_000000.jpg)은 .htaccess 파일을 수신합니다 (/123/456/super_000000.jpg). 이제는 동일한 경로로 리디렉션해야하지만/ciim5 접두어와 large_000000.jpg를 사용합니다. 이것은 시행 착오로 이루어졌으며 실제로 이것이 어떻게 작동하는지 이해하지 못합니다. 그래서이 대답을 확장하십시오.

관련 문제