2012-11-16 3 views
0

각 개인이 자신의 개인 프로필을 가지고있는 웹 사이트가 있습니다. 같은 정적 URL을 가지고 싶습니다, mywebsite/user2, 실제로는 같은 페이지에 남아서 콘텐츠를 동적으로 변경합니다. 이유는 사이트를 열 때 데이터베이스에 일부 데이터를 요청하고 페이지를 변경할 때마다 묻지 않기 때문입니다. URL이 마음에 들지 않습니다 mywebsite? user = 1동적 페이지에 다른 정적 URL이 있습니다.

해결책이 있습니까?

[EDIT 더 나은 explenation]

내 웹 사이트의 사용자 프로파일을 표시하는 동적 페이지를 감사드립니다. 그래서 URL이 같은입니다 http://mywebsite.me?user=2 하지만 난 http://mywebsite.me/user2name 내가 원하는 이유

처럼 정적 링크를하고 싶습니다 이? 그것은 기억하기 쉽고 쓰기 쉽기 때문에 매번 데이터를 데이터베이스에 묻지 않고 페이지의 내용을 동적으로 변경할 수 있기 때문에 (모든 페이지에서 일부 공유 정보가 필요합니다.) 정보

+0

당신이 무엇을 요구하고 있는지 확실하지 않습니다. AJAX 로딩을 요구하고 있습니까? 캐싱을 요청합니까? 예쁜 URL을 요청하고 있습니까? 모든 사람들이이 질문에 어떻게 합쳐 지는지 확실하지 않습니다. – deceze

+0

예쁜 URL이 무엇인지 모르겠고 캐싱이 유용 할 수도 있습니다 ...하지만 질문은 그것에 관한 것이 아닙니다. 나는 더 잘 설명하려고 노력한다. 내 질문을 편집 – DeLac

+2

Google에 "pretty url"이 무엇인지 물어보십시오. "fimas"에 설명 된대로 URL을 다시 작성해야합니다. –

답변

3

예 문제가 해결되었습니다!

첫 번째 해결책은 서버 의존입니다. 나는 이것이 IIS 서버에서 어떻게 작동하는지 약간 확신 할 수 없지만 아파치에서는 간단하다. Apache는 .htaccess이라는 파일에서 지시문을 사용할 수 있습니다. .htaccess 파일은 작동하는 활성 스크립트와 동일한 폴더에 있어야합니다. 또한 지시문 AllowOverride All과 모듈 mod_rewrite이 주 서버 구성에로드되어 있어야합니다. 당신은이 모든 설정 한 경우에는

RewriteEngine on 
RewriteRule ^mywebsite/([^/\.]+)/?$ index.php?user=$1 [L] 

다음 이것은 당신이 mywebsite/12mywebsite/index.php?user=12에 액세스 할 수 있도록 할 포함하여 htaccess로 파일을 편집해야합니다. 초보자 가이드 mod_rewrite.

PHP로만 가짜로 만들 수도 있습니다. 앞의 예제처럼 예쁘지는 않지만 실행 가능합니다. 또한 사용자 입력을 가지고 데이터를 조작하여 오염 된 데이터를 처리 할 것이라는 결론을 내립니다. 사용자는 mywebsite/index.php/user/12을 통해 스크립트에 액세스해야합니다.

<?php 
    $request = $_SERVER['REQUEST_URI']; 
    $request = explode($request, '/'); // $request[0] will contain the name of the .php file 
    $user[$request[1]] = $request[2]; 

    /* Do stuff with $user['user'] */ 
?> 

이것은 내가 원하는 것을 습득하는 가장 빠른 방법입니다.

1

우선, 솔루션을 숙지하시기 바랍니다 여기 제시 : http://codeumbra.eu/how-to-make-a-blazing-fast-ajax-call-to-a-zend-framework-application

이 당신이 제안 정확히 수행합니다 모든 불필요한 데이터베이스 쿼리를 제거하고 귀하의 경우 (현재는 필요한 경우에만 하나를 실행 : 사용자 데이터를 가져). 애플리케이션이 젠드 프레임 워크를 사용하지 않는다면 원칙은 동일하게 유지됩니다. 애플리케이션에 필요한 방식으로 데이터베이스 연결을 열면됩니다. 또는 PDO를 사용하거나 편안하게 사용하십시오.

본질적으로이 메서드는 사이트에 AJAX 호출을 수행하여 원하는 데이터를 가져 오는 것으로 가정합니다. jQuery (위의 기사에서 제공 한 예제)는 쉽습니다. 성공한 경우 자바 스크립트를 사용하여 이전 사용자의 데이터를 요청 된 데이터로 바꿀 수 있습니다 (AJAX에 익숙 하시길 바랍니다. 그렇지 않은 경우 댓글을 남기시 고 자세한 내용을 설명하겠습니다).

[편집] 당신이 무엇을 의미하는 URI 내가 간단한 URI 라우터를 implemensting 제안 할 수 있습니다, 재 작성 것을 당신의 편집에서 설명 했으므로

. 작동 원리에 대한 기본 내용은 여기에 설명되어 있습니다. http://mingos.eu/2012/09/the-basics-of-uri-routing. 라우터를 응용 프로그램에서 필요에 따라 복잡하거나 간단하게 만들 수 있습니다.

0

URL은 데이터베이스 호출을하는지 여부를 지정하지 않습니다. 그것들은 별개의 두 문제입니다. 일반적으로 서버를 설정하여 example.com/username으로 내부적으로는example.com/user.php?id=username으로 다시 작성합니다. PHP를 계속 실행 중이지만 URL은 단지 그것을 마스킹하는 것입니다. 그것은 예쁜 URL로이라고하며 URL 재 작성으로 실현됩니다.

데이터베이스를 호출하지 않으려면 캐시 데이터를 호출하십시오. 예 : 위의 user.php 스크립트에서 전체 HTML 페이지를 생성 한 다음 어딘가에 캐시 폴더에 쓴 다음 다음 번에 페이지를 다시 생성하지 않고 다음 번에 이미 작성한 페이지의 내용 만 출력합니다. 또는 데이터베이스 데이터를 어딘가에 캐시 할 때마다 매번 HTML을 새로 생성합니다.

에 실제 HTML 파일을 쓸 수 있으므로 웹 서버는 PHP를 신경 쓰지 않고도 직접 서비스를 제공합니다. 그건 이 아니고 일 것입니다. 업데이트/만료가 어려우므로 일반적으로 일부는 동적 콘텐츠가 필요합니다.

+0

네, 그들이 별개의 문제 (db 및 url 재 작성)임을 압니다. 내 모든 페이지는 내 데이터베이스에 저장된 일부 데이터를 사용하므로 페이지를 변경하면 해당 데이터를 다시 처리해야합니다. 그러나 같은 페이지에 남아있는 동적 페이지를 사용하는 경우 데이터를 다시 처리 할 필요는 없지만 엉망인 URL이 있습니다. 그래서 ... 네, URL 재 작성이 제 해결책이라고 생각합니다. 나는 그것에 대해 모른다. – DeLac

+0

그것들은 모두 별개의 문제이다. 페이지 (예 : AJAX)의 콘텐츠를 동적으로 변경하는 경우 해당 데이터가 어딘가에서 올 필요가 있습니다. AJAX와 못생긴 URL 또는 예쁜 URL로 동적 인 페이지를 만들 수 있습니다. AJAX를 사용하거나 사용하지 않고 캐싱 할 수 있습니다. 모두 함께 할 수도 있고 아무 것도 할 수도 없습니다. – deceze

+0

예, 페이지간에 공유 된 데이터에 대해 이야기합니다 ... 사용자 페이지와 관련된 정보가 아닙니다. 이 경우 AJAX를 사용해야합니다. 미안하지만 내 문제를 잘 설명하지 않았다면 – DeLac

0

데이터베이스에서 모두 선택하십시오.

그런 다음 각 스크립트 내용 (index.php? user = 's)을 포함하는 파일을 만듭니다. SELECT 문에서 가져온 파일 이름을 user_id/user_name으로 설정하십시오.

그러면 현재 폴더의 각 사용자에 대한 페이지가 생성됩니다.

'정적'페이지를 다시 만들지 않으려면 'indexedetet'라는 새 열을 설정하고 파일을 만들 때 1로 변경하십시오. 당신은 이것을 0으로 갖는 파일만을 선택합니다. cronjob을 통해 하루에 한 번 수행 할 수 있습니다.

이렇게하면 사용자가 자동으로 업데이트하지 않기 때문에 사용자 데이터가 변경 될 수 있습니다. 여기서 사용하는 전술은 모든 편집에서 정적 페이지를 업데이트하는 것입니다.

또 다른, 아마도 (커피가 충분하지 않아서 미안하지만) 이상적으로 사용자 등록시 폴더를 만드는 것이 좋습니다. 등록 할 때 index.php 페이지를 수정하면 www.mysite.com/myuser와 같은 것이 '맞춤형 버전'으로 표시됩니다. 사용자 업데이트 페이지를 다시 업데이트하십시오.

나는 귀하의 접근 방식에 따라 예제를 제공해 드리겠습니다.