2012-03-19 4 views
0

문제를 재 작성합니다. 아래에서 나는 내가하려고하는 것에 대한 모든 세부 사항을 제공하고 있으며, 내가 얻고있는 결과는 무엇인가? 이번에는 아주 분명하기를 바랍니다. 샘플 페이지는 www.broadcast2world.com/samples.php입니다. 페이지에서 볼 수있는 모든 링크와 데이터는 데이터베이스에서 가져옵니다. 이제 특정 비디오에 대한 "추가 정보"링크를 클릭하여 사회 통제를한다고 가정합니다. 해당 비디오의 특정 href는 <a href="video.php?pid='.$id.'">으로 트리거됩니다. 그것은 내가 $의 페이지 id 변수를 사용하여.htaccess를 통해 동적 URL을 정적 URL로 변환 할 수 없습니다.

if(!isset($_GET['pid'])){ 
    $pageid='66'; 
} 
else{ 
    $pageid=$_GET['pid']; 
} 

을 사용하여 변수에 해당 ID를 잡을 형식 http://www.broadcast2world.com/video.php?pid=66.

에서 URL을 통해 자사의 ID를 전달, 내가 궁극적으로 특정 비디오의 페이지를 준비하는 쿼리를 실행합니다.

내 SEO 사람이 필요로하는 형식은 www.broadcast2world.com/video/name-of-the-video 형식의 URL입니다.

이제 문제는 Ben이 멋지게 설명하는 mod_rewrite 수정안을 만들면 그 이름과 해당 비디오 ID를 연결하는 방법을 알 수 없다는 것입니다. 위에 설명 된대로 동영상에 대한 특정 URL을 만드는 동안 수정해야하는 항목이 있어야합니다. 그러나 나는 정말로 무엇을 모르는가? 덕분에 다시 멋진 지원

+0

행운을 문제가 해결 되었습니까? –

+0

Hi Ben, 많은 후속 조치 주셔서 감사합니다. 아직 제대로 구성 할 수 없었습니다. 나는 url을 생성 할 때 무언가를 잃어 버렸다고 생각하는데, 그것은 여전히 ​​쿼리 형식이다. 지난 번에 내가 한 때, 많은 공헌자들이 저를 투표하고 조롱했기 때문에 그것에 대해 물어보기가 두려웠습니다. 내가하는 일을 정확히 할 수 있다면 괜찮습니까? –

+0

안녕하세요 벤, 당신의 요지를 얻었습니다. 나는이 질문을 다시 편집 중이며 이번에는 훨씬 더 명확하게하기를 바란다. 조언 해주셔서 감사합니다. –

답변

2

해당 웹 사이트에서 생성 한 .htaccess 코드에는 여러 가지 문제가 있습니다.

  • 기간 문자 (.)을 지시한다 RewriteRule 왼쪽의 탈출한다 - 즉 \.php.
  • 쿼리 문자열을 고려하지 않았습니다 (아래에서 설명하는 문제의 주요 원인입니다).
  • 사용 된 리디렉션 유형에 대한 표시가 없습니다. 일시적인? 퍼머넌트?
  • RewriteBase 명령어가 없습니다. 기본적으로 /이 필수 항목은 아니지만 가독성을 위해 필자는이를 사용하는 경향이 있습니다.

다시 쓰기 지시문은 특히 REQUEST_URI 구성 요소 만 고려합니다. 아래는 mod_rewrite manual page입니다.

REQUEST_URI 요청한 URI의 경로 구성 요소입니다 (예 : "/index.html"). 이는 특별히 인 쿼리 문자열을 QUERY_STRING이라는 자체 변수로 사용할 수 없도록합니다.

다음 코드는 주석에 설명되어 있으며 여기에서 디버깅 정보는 아래에서 확인할 수 있습니다.

# Enable rewrite engine http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteengine 
RewriteEngine On 

# Sets the base URL for per-directory rewrite http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase 
RewriteBase/

# Match the regular expression ^pname=...$ with the QUERY_STRING variable as the subject 
# Query string starts with pname (`^`). 
# Matches exactly pname=overviewvideos. 
# Must end with overviewvideos (`$`) 
RewriteCond %{QUERY_STRING} ^pname=overvidevideos$ 

# If the above condition is met, redirect to the 2nd parameter. 
# Note the escaped period (\.) 
# Note the status code 302 (Found, temporary) Can be 301 for permanent etc. 
# Note the L flag - this prevents further rules being processed if the conditions are met. (L for Last) 
# Note that at this stage we are back to matching the REQUEST_URI, so just allvideos.php in our regular expression. Must start and end with the string allvideos.php 
RewriteRule ^allvideos\.php$ allvideos.php?pname=Overview%20Videos [R=302,L] 

입력 URL : http://www.yoursite.com/allvideos.php?pname=overvidevideos

RewriteCond %{QUERY_STRING} ^pname=overvidevideos$ This condition was met 
RewriteRule ^allvideos\.php$ allvideos.php?pname=Overview%20Videos [R=302,L]  
    This rule was met, the new url is http://www.yoursite.com/allvideos.php?pname=Overview%20Videos 
    Test are stopped, because of the R in your RewriteRule options. A redirect will be made with status code 302 

출력 URL : http://www.yoursite.com/allvideos.php?pname=Overview%20Videos

규칙을 반복하려면, 당신은한다 RewriteCond와 RewriteRule의 시작 선을 복제 할 수 있습니다.

1

마찬가지로 같은 변경을 아래의 코드

RewriteRule ^allvideos.php?pname=overviewvideos$ allvideos.php?pname=Overview%20Videos 

주의점 ?

/의 교체와 함께 다음 줄

RewriteRule ^allvideos.php/pname=overviewvideos$ allvideos.php?pname=Overview%20Videos 

교체 제 2의 재 기입 규칙으로

+0

@Ben Swinburne : 고마워요. –

관련 문제