2013-06-30 1 views
0

원하는 작업을 수행하는 데 문제가 있습니다. 나는 우리 사이트에 가입하는 몇 개의 thounsand 제휴사를 가질 예정이다. 그들은 사용자 이름을 제공 할 것이고 기본적으로 www.domain.com/affiliate/username이라는 URL을 고객에게 제공 할 것입니다.변수가있는 .htaccess를 생성하십시오.

그래서, 내가 시작할 URL은 www.domain.com/affiliate/home.html?userid=bob입니다 (Bob이 사용자 이름 인 경우).

mysql 데이터베이스에서 해당 사용자 ID가 있는지 확인한 다음 www.domain.com/affiliate/bob url로 리디렉션해야합니다.

는 지금, 나는 htaccess로 파일이 있습니다

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^$ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^\/]+)$ affiliate/home.html?affiliate=$1 [L] 

그것은 분명히 나던 작업과 필자 전에 htaccess로 처리하지 않습니다. 어떤 도움이라도 대단히 감사합니다. 고맙습니다.

+0

htaccess 파일은 어디에 있습니까? –

답변

1

이 시도 : 좋네요 찾고 URL로 리디렉션에 관해서는

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^affiliate/([^/]+)/?$ /affiliate/home.html?affiliate=$1 [L] 

을 누군가가 쿼리 문자열로 하나 입력하면 :

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /affiliate/home.html\?affiliate=([^\ &]+)&?([^\ ]*) 
RewriteRule^/affiliate/%2?%3 [L,R=301] 

사용자 이름이있는 경우 확인하는 방법은 없습니다 당신의 htaccess 파일을 사용하여 다시 쓰기 전에 데이터베이스에 저장됩니다. 아파치 2.4에서 데이터베이스와 대화하거나 RewriteMap (htaccess가 아닌 서버 또는 vhost 설정에서만 정의 할 수 있음)을 사용하는 방법이 있지만 home.html에서 확인하는 것이 더 좋으며 사용자를 찾을 수 없습니다.

+0

home.html은 두 번째 규칙의 정규식이기 때문에 집에 \ .html이어야합니다. – Sumurai8

+0

감사합니다. Jon Lin, 완벽하게 일했습니다. 두 번째 질문이 있다면, 사이트에있는 동안 해당 제휴사/밥/URL을 유지하는 방법이 있습니까? 그래서 지금 당장 사이트의 링크를 클릭하면 affilate/bob에서 벗어날 것입니다. URL에 제휴사 이름을 유지할 수있는 방법이 있습니까? – dkeeper09

+0

@ dkeeper09 귀하의 콘텐츠에있는 URL을 올바른 URL을 가리 키도록 변경해야합니다. –

0

my answer on an other similar question을 참조하십시오.

www.domain.com/affiliate/home.html?userid=bob/affliate/bob으로 리디렉션해야합니다. /affliate/bob/affiliate/home.html?userid=bob으로 다시 쓰려고합니다.


/www/ 또는 /public_html/ 당신에 .htaccess이 추가.

RewriteEngine on 

RewriteCond %{QUERY_STRING} ^affiliate=([^&]*)$ 
RewriteRule ^affiliate/home\.html /affiliate/%1? [R,L] 

RewriteRule ^affiliate/(.*)$ affiliate/home.html?affiliate=$1&r=0 [L] 

사용자가 affiliate/home.html?userid=bob에 액세스하려고하면 첫 번째 규칙이 일치합니다. RewriteCondition은 멋진 URL을 작성하는 데 필요한 쿼리 문자열의 일부 (? 다음)와 일치합니다. %1은 다시 쓰기 조건의 첫 번째 '캡처 그룹'과 일치합니다. 끝에 ?은 쿼리 문자열을 지 웁니다. [R]은 리다이렉트됨을 의미합니다 (링크 된 답변 참조). [L]은 일치하는 경우 일치를 중지 함을 의미합니다.

두 번째 규칙은 내부 재 작성입니다. $1은 RewriteRule의 첫 번째 '캡처 그룹'과 일치합니다. 후행 &r=0은 일치하는 첫 번째 규칙을 중지합니다. fancy url이 같은 디렉토리에 있기 때문에 적절하게 작동하려면 RewriteCond %{REQUEST_FILENAME} !-f이 필요합니다.

+0

좋아, 그래서. htaccess에서 그 코드를 시도했다. 내 public_html 폴더에 넣으십시오. 몇 가지 잘못 생각합니다. 1. 제휴사/home.html에 입력하면 rediritect가되지 않습니까? userid = bob 2. www.domain.com/affiliate/bob에 입력하면 www.domain으로 리디렉션됩니다.co.kr/domain/affiliate/bob 또한 리디렉션이 발생하기 전에 mysql 데이터베이스로 사용자 ID를 확인하는 방법이 있습니까? 나는 누군가가 www.domain.com/affiliate/bob에 우리 데이터베이스의 실제 제휴사를 넣는 지 확인하고 싶습니다. 말이 돼? – dkeeper09

+0

.htaccess를 사용하여 해당 검사를 수행 할 수 없습니다. home.html (또는 home.php)에서이 검사를 수행하고 사용자가 데이터베이스에 존재하지 않으면 php 파일에서 다른 페이지로 리디렉션해야합니다 (헤더 ("Location : WhaargErrorPage. php ");'나는 생각한다. '/ domain/affiliate/bob'은 다른 rewriterule에 의해 아마도 그것이 내 부분에 도착하기 전에 url을 엉망으로 만든다. httpd.conf에 있다고 가정합니다. – Sumurai8

+0

만약 리다이렉트를 재 작성하기 전에 재 작성을 옮길 수 없다면 모든 리다이렉트 전에'RewriteRule^yourdomain /(.*)$ $ 1'을 넣고'RewriteRule^(. *) $ yourdomain/$ 1'을 바로 뒤에 놓으십시오. 모든 리다이렉션 ('[R]'). 리디렉션은 서버에서 올바른 파일을 찾는 데에만 사용되므로 리디렉션에서이를 무효화해야한다고 생각합니다. – Sumurai8

관련 문제