2013-05-03 2 views
0

나는 다음 예제 중 하나를 사용하여 URL 표시 줄에서 호출 할 수있는 웹 사이트를 구축하기 위해 노력하고있어 :htaccess로 동적으로 생성 SEO 친화적 인 URL을

domainname.com/en 
domainname.com/zh-cn/ 
domainname.com/fr/page1 
domainname.com/ru/dir1/page2 
domainname.com/jp/dir1/page2/ 
domainname.com/es-mx/dir1/dir2/page3.html 

이 페이지 요청 내 충돌 할 필요가있다. 안전하게 내가뿐 완전히 패배 걸릴 노력하고있어 URL의 동적 특성으로 다룰 것이다 내가한다 RewriteCond를 만들기 위해 노력했습니다

/index.php?lng=???&tpl=??? 

와 RewriteRule의 코드 : 궁극적 htaccess로 템플릿이 PHP를 호출로 변환 . 나는 거의 50 개의 다른 웹 사이트를 읽었으며 거의 ​​일주일 동안이 일을 해왔지만 현재 내가하고있는 일을 전혀 모른다. 나는 RewriteCond를 사용해야하는지조차 모른다. 어떤 도움

RewriteRule ^(([a-z]{2})(-[a-z]{2})?)([a-z0-9-\./]*) /index.php?lng=$1&tpl=$4 [QSA,L,NC] 

감사합니다, 당신의 정규식 패턴이 /index.php 일치하는 것을 루프입니다 원인을 무엇

빈스

+0

참고 : http://htaccess.madewithlove.be/에서 테스트 할 때마다 문제없이 작동하지만 내 자신의 서버에서 테스트를 계속합니다. '500 Internal Server Error'가 계속 발생합니다. .htaccess 파일을 서버에서 지우지 않으면 내 도메인에 아무런 추가 매개 변수도 표시되지 않습니다. – Vince

+0

내 htaccess에 루프 스톱퍼를 추가했는데 내 문제가 해결 된 것처럼 보였지만 여전히 루프가 무엇인지 이해하지 못합니다. RewriteCond % {ENV : REDIRECT_STATUS} 200 RewriteRule. * - [L] – Vince

답변

1

: 여기에 RewriteRule의 나 자신을 나의 마지막 시도입니다. 왜? 이제 살펴 보자

먼저, 접두사는 이러한 htaccess로 파일의 규칙이기 때문에 제거, 그래서 첫 번째 재 작성 후 URI가 있습니다 : index.php (쿼리 문자열입니다 별도)

정규식의 시작 : ^(([a-z]{2})(-[a-z]{2})?)은 의 URI와 일치합니다.

정규 표현식의 다음 비트는 dex.php과 일치합니다. 따라서 규칙이 일치하여 에 다시 적용되고 내부 재귀 제한에 도달 할 때까지 계속 적용됩니다.

귀하의 URL 구조 : 당신이 고려해야하므로

domainname.com/en 
domainname.com/zh-cn/ 
domainname.com/fr/page1 
domainname.com/ru/dir1/page2 
domainname.com/jp/dir1/page2/ 
domainname.com/es-mx/dir1/dir2/page3.html 

중 하나는, 국가 코드 또는 전혀 아무것도 후 / 있습니다

# here -------------------v 
^(([a-z]{2})(-[a-z]{2})?)(/([a-z0-9-\./]*))?$ 
#  and an ending match here ------------^ 

을 변경할 필요가 없습니다 다른 항목 :

RewriteRule ^(([a-z]{2})(-[a-z]{2})?)(/([a-z0-9-\./]*))?$ /index.php?lng=$1&tpl=$4 [QSA,L,NC] 
+0

타이 존, 당신은 내 정신을 구했습니다. 여기에서 나오는 다른 모든 것들은 간단한 PHP 문자열 파싱으로 어떤 문제도 없습니다. – Vince

관련 문제