2017-02-23 10 views
0

더 많은 URL 버전으로 리디렉션되는 많은 짧은 URL이있는 사이트에서 작업하고 있습니다. 짧은 URL은 오프라인으로 배포되고 사용자는 일반적으로 브라우저 주소 표시 줄에 URL과 짧은 URL을 기억한다는 아이디어가 있습니다. 예 : http://www.example.com/abchttp://www.example.com/higher_education/companion/politics/abc.html
으로 리디렉션해야합니다. 또한 몇 가지 외부 링크가 있습니다. 같은 : http://www.example.com/googlehttps://www.google.com
편집 할 수있는 사용자를 리디렉션합니다 - http://www.example.com/elementary/def.htmlhttp://www.example.com/elementary/xyz.html
로 리디렉션됩니다 다른 시나리오가있다 그러나, 우리가 지금 RewriteMap와이를 달성하고자합니다. 우리는 그것을 위해 작성한 코드는 다음과 같습니다 :httpd.conf의 RewriteMap과 .htaccess 충돌의 RewriteRule

<IfModule rewrite_module> 
RewriteEngine on 
RewriteMap custommap txt:/var/www/vhosts/example.com/httpdocs/map.txt 
#RewriteCond %{REQUEST_URI} !^/index.php$ 
RewriteRule "^(.*)$" "${custommap:$0}" [R,L,NC] 
</IfModule> 

map.txt에는 다음이 포함

abc http://www.example.com/higher_education/companion/politics/abc.html 
google https://www.google.com 

문제는 .htaccss 파일이 일부 RewriteRule의 포함되어 있습니다.

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/(.*)\.html$ /index.php?sid=$1&ssid=$2 [L,NC,QSA] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)\.html$ /index.php?sid=$1 [L,NC,QSA] 

그래서 모든 요청은 .html 표준 CMS의 기능으로 index.php에 의해 제공됩니다 함께 제공됩니다. 그러나 이제 코드는 리디렉션 루프로 이동합니다. 누군가이 문제를 완화하기 위해 약간의 빛을 공유한다면 그것은 좋을 것입니다. Apache 버전은 2.2이므로 IF-ELSE를 사용할 수 없습니다.

감사합니다,
Aneek

당신은 RewriteMap에서 URL을 제공하는 규칙에 대한 몇 가지 제한을 두어야

답변

0

:이 URI에없는 DOT 만이 아닌 파일이 아닌 디렉토리를 보장합니다

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond ${custommap:$0} !^$ 
RewriteRule ^[^.]+$ ${custommap:$0} [R=301,L,NE] 

custommap에 의해 처리됩니다.

더 중요한 것은 리디렉션 전에 custommap에 매핑 존재를 확인합니다.

이 변경 사항을 테스트하기 전에 브라우저 캐시를 지웠는지 확인하십시오.

+0

안녕하세요, 저는 이것을 시도했지만 예, 파일 확장자가없는 비트에서 해결되었습니다. 그러나 리다이렉트되어야하는 URL이 있다면, 또 다른 도전이됩니다. 어떻게해야합니까? –

+0

'RewriteRule. + $ {custommap : $ 0} [R = 301, L, NE]'도 정상적으로 작동해야하지만 맵 파일의 키 이름에 DOT를 피할 수없는 이유는 모르겠습니다. – anubhava

+0

고마워, 나는 이것도 확인해 보겠다. –