2009-12-18 2 views
0

나는 "ThisLanham"이 사용자 이름 인 "www.mysite.com/Page/ThisLanham"형식의 URL을 사용하여 다른 사용자의 홈페이지에 (이상적으로) 액세스 할 수있는 웹 사이트를 설정하고 있습니다. 사용자 이름은 문자로 시작하며 밑줄, 하이픈 또는 마침표와 함께 영숫자 문자로 구성 될 수 있습니다.'.'을 (를) 검색하는 데 문제가 있습니다. htaccess를 사용하여

지금까지 리다이렉션은 마침표 문자 사용을 무시할 때 완벽하게 작동했습니다. 다음 코드는 해당 요청을 처리

RewriteRule ^page/([a-zA-Z][0-9a-zA-Z-_]*)/?$ Page/?un=$1 [NC,L] 

는 그러나, 나는 그것뿐만 아니라 기간을 확인 여러 가지 방법을 시도했지만, 모두 500 내부 서버 오류가 발생했습니다. 여기에 몇 가지 내 시도는 다음과 같습니다

RewriteRule ^page/([a-zA-Z][0-9a-zA-Z-\_\\.]\*)/?$ Page/?un=$1 [NC,L] 
RewriteRule ^page/([0-9a-zA-Z-\_\\.]\*)/?$ Page/?un=$1 [NC,L] 
RewriteRule ^page/([a-zA-Z].\*)/?$ Page/?un=$1 [NC,L] 
RewriteRule ^page/(.\*)/?$ Page/?un=$1 [NC,L] 

내 백업 계획은 더 이상 사용자가 자신의 사용자 이름에 마침표를 포함 할 수없는 것입니다,하지만 난 차라리 해결책을 찾을 것입니다. 어떤 아이디어 ???

+0

주 (추가 공백은 보존). 텍스트 편집기 도구 모음의 "101 \ n010"단추는 들여 쓰기됩니다. 기울임 꼴 텍스트보다 훨씬 읽기 쉽습니다. – outis

+0

그런데 serverfault.com에서 이와 같은 질문을 확인하십시오. – outis

답변

0

리디렉션 대상이이 규칙과 일치하므로 무한 재귀가 발생할 수 있습니다.

(이 경우 index.php를에) 대상을 제외이 규칙보십시오 : 당신은 (적어도) 네 개의 공간으로 들여 쓰기가 코드로 텍스트를 포맷 할 수 있습니다

RewriteCond $1 !=index.php 
RewriteRule ^page/([a-zA-Z][0-9a-zA-Z-_.]*)/?$ Page/?un=$1 [NC,L] 
0

마침표는 (괄호로 묶인) 문자 클래스 내의 메타 문자가 아닙니다. 그러나 하이픈이 있습니다. [Z-_]은 Z부터 _까지의 문자 범위입니다. ASCII에서는 [Z\[\\\]^_]과 같습니다. 시도해보십시오.

RewriteRule ^/?page/([a-z][-_.0-9a-z]*)/?$ Page/?un=$1 [NC,L] 

참고 : 비교는 대소 문자를 구분하지 않으므로 A-Z 문자 범위를 신경 쓰지 않았습니다.

지금까지 재 작성에 관한 한, 당신은 "페이지"로 시작 모든 URL을 리디렉션 및 "알 수없는 사용자"페이지 또는 (오히려 서버보다) 스크립트를 가진 다른 곳에 불법 사용자 이름을 처리 할 수 ​​있습니다 생성 a 404.

RewriteRule ^/?page/([^/]+)/?$ Page/?un=$1 [NC,L] 

유효한 사용자 이름으로 나중에 확장하려면이 방법을 사용하면 쉽게 전환 할 수 있습니다. 알 수 없지만 유효한 사용자 이름을 스크립트에서 처리해야하므로 두 번째 방법은 추가 작업이 필요하지 않습니다.

관련 문제