2013-08-14 5 views
4

기존 웹 사이트를 다국 언어로 설정하라는 요청을 받았습니다. 내가/EN/경로에서// 페이지 경로 기존의 모든 페이지를 이동해야했다이htaccess에서 조건부 리디렉션 설정

내가 지금 어떤을 보내 htaccess로 리디렉션을 설정해야합니다 기존의 들어오는 연결을 유지하려면/페이지에 대한 준비에

원래 URL의 요청을 new/en/path/page URL로 보내지 만이 작업을 수행하는 데 문제가 있습니다.

이것은 현재 가지고있는 것입니다. 내가 생각

RewriteCond %{REQUEST_URI} !^/en$ RewriteRule ^(.*)$ /en/$1 [R=301,L] 

는 요청 URI를 확인하는 것을 의미하고 요청 된 URI에 다음 앞에 추가/엉 엉로/시작 ...하지만하지 않는 경우 나는 분명히이 '아무튼 이후로 착각 해요 일하지 마라.

도움을 주시면 감사하겠습니다. 고맙습니다.

업데이트. 이것이 ExpressionEngine 사이트이며, URL의 index.php를 부분을 제거하는 추가 규칙이 있기 때문에 여기에 내가 또한 index.php를 한 후 언어 재 작성에 이것을 시도

# Rewrite for new language based urls 
# This is to try and get all current pages going to /en/(old url) with a 301 redirect 
RewriteCond %{REQUEST_URI} !^/en(/.*)?$ 
RewriteRule ^(.*)$ /en/$1 [R=301,L] 


# Removes index.php 
RewriteCond $1 !\.(gif|jpe?g|png|ico)$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php/$1 [L] 

모두 규칙입니다. 나는 여전히 루프에 갇혀있다.

답변

6

$en 바로 뒤에있는 문자열의 끝을 나타내므로 URI가 정확히 /en이 아닌지 확인하십시오. 다른 규칙을 고려

RewriteCond %{REQUEST_URI} !^/en(/.*)?$ 
RewriteRule ^(.*)$ /en/$1 [R=301,L] 

갱신 :

는 URI가 정확히 /en 또는 /en/ 여부 확인 또는 /en/로 시작하지 않으며, 그런 경우는 /en/을 앞에 추가되며,이 시도 .htaccess 파일에있는 경우 다음 내부 리디렉션에 대해 /index.php...에 대해 언어 규칙을 다시 일치시켜야합니다. 그렇지 않으면 무한 루프가됩니다.

이를 방지하기 위해 더 나은 방법, 첫 번째 조건에 index.php 확인 될 것입니다 내 마음에 오는 그러나 먼저가있을 수 있습니다 :

RewriteCond %{REQUEST_URI} !^/(index\.php|en)(/.*)?$ 

그래서이 규칙 애프터 적용하지 않는 원인이됩니다 내부 리디렉션. 그러나 내부 리디렉션이 index.php으로가는이 경우에만 문제가 해결됩니다.

+0

감사합니다. 시도해 보았지만 아직 제대로 작동하지 않습니다. 나는 여기서 뭔가 다른 것이 있다고 생각하고있다. 이것은 ExpressionEngine 구동 사이트로 htaccess를 사용하여 URL의 index.php 부분을 제거합니다. 이 질문을 업데이트하여 재 작성을 보여줄 것입니다. – foamcow

+0

마지막 룰은 다른 (내부) 리다이렉트를 발생시키고, mod_rewrite는이 새로운 URI에 대한 룰을 다시 평가할 것이다. 여기서 첫 번째 룰은 다시 일치 할 것이다. 내 대답을 업데이트 할게. – ndm

+0

다시 한번 감사드립니다. 나는 가능한 한 빨리 그걸 줄거야. – foamcow

관련 문제