2012-08-28 3 views
0

리디렉션합니다. 제 생각에는 PHP와 정규 표현식을 처음 접했습니다.정규식 구문 분석 하위 도메인과 지금은 거의 2 시간 동안이 문제를 알아 내기 위해 노력하고 그것이 내가 당신의 일부가 나를 도울 수 있기를 바랍니다 그렇게 작동되지 수

내가 하위 도메인의 텍스트를 기반으로 특정 페이지로 리디렉션됩니다 리디렉션 설정에 노력하고, 그래서 좋아. 내 하위 도메인에 대한 와일드 카드 설정이 있고 하위 도메인 URL은 이제 아래 코드가 포함 된이 PHP 파일로 리디렉션됩니다. 누군가가 anytexthere.domain.com에 오면

그래서 그들은이 PHP 파일이 올바른 해당 URL로 보내는 데 사용됩니다 domain.com/redirect.php

에 도착. 그리고 .domain 전에 -

내가 같은 anythinghere-1.domain.com 같은 하위 도메인을 사용하고 후 하위 도메인에 표시되는 내용을 내 코드 체크를해야 할 것입니다이 작업을 수행합니다. 이 경우 같으면 1과 일치하는 URL로 이동하십시오.

코드 지금까지 :

<?php 

$host = $_SERVER['SERVER_NAME']; 
preg_replace('(?<=-).*?(?=\.)', $host, $matches); 
$url = $matches; 

switch ($url) 
{ 
case "1": 
header("Location: http://www.website.com/page-here/"); 
break; 

case "test": 
header("Location: http://www.website.com/this-is-a-test/"); 
break; 

case "another": 
header("Location: http://www.website.com/another-page-here/"); 
break; 

default: 
header("Location: http://www.website.com"); 
break; 
} 

?> 

당신은 내가이 후 텍스트 또는 숫자를 사용하기로 선택한 경우 내가 일을해야하기 때문에이 경우 그 사용 텍스트 예 : "다른"대신 번호를 볼 수 있듯이 - 하위 도메인에 있습니다.

지금 나에게 다음과 같은 오류주고있다대로이 코드 :

경고 : preg_replace이다가() [function.preg이-교체] : '.'알 수없는 수정을 라인 thelocationhere 4

경고 : 헤더 정보를 수정할 수 없습니다 - 이미가 보낸 헤더 (출력 thelocationhere에서 시작 : 4) thelocationagain에 줄에 내가 믿는 22

위의 두 번째 오류는 기본 경우와 관련이 있습니다.

나는 정말 어떤 도움을 주셔서 감사합니다. 코드 조각을 모두 검색하고 테스트하는 데 많은 시간을 할애했지만 독자적으로 작동하지는 못했습니다.

덕분에, 피터

+0

두 번째 오류는 이미 뭔가를 보냈기 때문에 (첫 번째 오류). 첫 번째 오류는 [구분 기호]가 누락 되었기 때문입니다 (http://us2.php.net/manual/en/regexp.reference.delimiters.PHP) 귀하의 정규식에 (결과적으로, 그것은'()'구분 기호로 가정하고 그 후에'.'로 무엇을 해야할지 모르겠다. – Wiseguy

답변

1

당신은 작은 실수가 - 당신은 preg_match를 대신 preg_replace이다를 사용했다. 또한 정규식을 /로 채워야합니다. 그래서 다음과 같아야합니다.

그런데
preg_match('/(?<=-).*?(?=\.)/', $host, $matches); 

, 당신은 * .domain.com에이 domain.com/redirect.php 접촉을 시도 모두 접근을하는 방법을 언급하지 않았지만, 난 htaccess와 RewriteEngine을 사용한다고 가정합니다. RewriteRule에 직접 입력하면됩니다. 은 "헤더가 이미 전송"

은 일부 출력이 브라우저로 전송되었음을 의미합니다. BOM없이 UTF-8로 파일을 저장 했습니까? 또는 리디렉션 전에 브라우저에 무엇인가를 인쇄 한 것입니까? 파일 시작 부분에 일부 누락 된 공백이있을 수도 있습니다.

+0

빠른 답장을 보내 주셔서 감사합니다. 리디렉션 코드에 대한 * .domain.com은 내 cpanel에서 수행됩니다. 위에서 제시 한 정규식을 테스트했지만 이제는 정규식과 일치하는 대/소문자가 아닌 기본 대/소문자 URL로 리디렉션됩니다. 이 테스트 URL examplesubdomain-another.domain.net에서는 해당 '다른'URL로 리디렉션되어야하지만 그렇지 않습니다. –

+1

@PeterSullivan'$ matches'에는 예상 한 내용이 포함되어 있습니까? (힌트 : no.)'$ matches'는 배열입니다. 아마도 $ url = $ matches [0];'을 원할 것입니다. – Wiseguy

+0

완벽한 감사합니다. 지금 일하고 있습니다. –

관련 문제