2009-08-21 2 views
4

서버에서 청크로 푸시되는 데이터가 많은 클라이언트 쪽 js 인 웹 응용 프로그램을 구축하고 있습니다. 보이지 않는 일련의 변수 동일합니다mod_rewrite를 사용하여 여러 변수가있는 친숙한 URL을 구현하는 가장 좋은 방법은 무엇입니까?

http://exmample.com/find/SomethingHere-or-there

:

내가 좋아하는 URL을 소요 친화적 인 URL 솔루션에 대한 솔루션을 구현하려합니다. 따라서이 같은 처리를 끝낼 수 있습니다 :

http://exmample.com/index.php?loc=London&type=2&priceCat=10-15

내가 매개 변수는 다음 전체 URL을 다시 받고으로 친화적 인 URL을 전달하여 값을 얻는다.

내 초기 구현은 친숙한 URL을 추출하고 일치하는 친숙한 URL을 db에 쿼리하여 매핑되는 모든 매개 변수로 전체 URL을 반환하고 다음으로이 URL 문자열을 작성하는 mod_rewrite 규칙을 사용했습니다 앞으로 웹 앱 앞쪽으로 매개 변수를 추출 할 웹 주소로 전달합니다.

그러나 PHP 헤더 ("위치 : http://example.com")를 사용하면 params가있는 전체 URL을 볼 수 있으므로 친숙한 URL이 손실됩니다. 이것은 내가 수행하고자하는 2 차적 요구 사항 중 하나입니다.

나는 웹 앱이 js가 무거 우므로 페이지를 렌더링 한 다음 웹 애플 리케이션에 db의 매개 변수를 아약스로 렌더링해야한다고 생각 했습니까? 이것이 최선의 방법인가요? 아니면 이것에 대한 다른 트릭이 있습니까?

js를 사용하는 클라이언트 측이 없어도 문제가되지 않습니다. 해당 매개 변수가 URL로 리디렉션되는 이유는 무엇

//get the friendly url as a parameter 
$goto = explode('=',$_SERVER['QUERY_STRING']); 
//$goto[1] = SomethingHere-or-there 

//build the friendly URL string 
$forwardingURL = 'Location:http://'.$_SERVER['HTTP_HOST'].'/'.getForwardedURL($goto[1]); 

//will be http://exmample.com/index.php?loc=London&type=2&priceCat=10-15 
header($forwardingURL); 

//function that returns the full url param string from the friendly url 
function getForwardedURL($friendlyURL){  
$friendlyURL = mysql_escape_string($friendlyURL); 
$query = " 
SELECT url 
FROM FriendlyURLmapping 
WHERE friendly_url = \"$friendlyURL\""; 

$resultP = mysql_query($query) 

//the full parametised URL will be in $row 
$row = mysql_fetch_array($resultP, MYSQL_ASSOC);  
return $row["url"]; 
} 

답변

3

일반 관행은 매개 변수화 된 URL에있는 값으로 URL을 매핑하는 것이다. 예를 들어 :

http://example.com/London/2/10-15
http://example.com/index.php?loc=London&type=2&priceCat=10-15


이는 htaccess로에서과 같이 수행 할 수 있습니다

RewriteEngine on 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ /index.php?loc=$1&type=$2&priceCat=$3 [L] 

나는 가능한 모든 경우 리디렉션 피할 것이다. 예제 (/something-here ~ /index.php?...)와 같이 완전히 다른 URL을 매개 변수에 매핑하려면 응용 프로그램을 다시 작성하여 매개 변수를 페이지를 표시하는 함수에 전달하거나 변수를 설정하고 포함 시키십시오. 처리를 수행하는 다른 PHP 파일.

+0

mod-rewrite를 사용하여 도메인 이름 다음에 오는 모든 것을 $ _URL로 내보낼 수 있습니다. 그런 다음 슬래시로 분해하고 각 부분을 PHP로 구문 분석 할 수 있습니다. – Breakthrough

+0

나는 대중적인 관행이 URL에 매개 변수를 구축하는 것에 동의한다. 그러나 요구 사항은 비 직접 매개 변수 매핑을 작성하는 것입니다. 이유는 매개 변수의 수가 변경 될 수 있다는 것입니다. URL 매핑을 다음과 같이 가정 할 수 있습니다. example.com/London/2/10-15 ~ example.com/index.php?loc=London&type=2&priceCat=10- 15 – thiswayup

+0

@Joe : 매개 변수 매핑을 어디에 저장 하시겠습니까? 후자 부분은 도움이 될 것입니다.'/ something-here'를'index.php? param = something-here'에 매핑하고 PHP 스크립트를 사용하여 필요한 정보를 표시하기 만하면됩니다. – DisgruntledGoat

0

:

첨부 내 inital 구현을 간략하게 설명하는 몇 가지 코드는? 매개 변수가있는 URL을 사용하고 실제 내용을 반환하는 이유는 무엇입니까?

그래서 대신 리디렉션을 수행하는, 같은 것을 할 :

$url = 'http://example.com/index.php?loc=London&type=2&priceCat=10-15'; // resolved from http://example.com/find/SomethingHere-or-there 
// split URL into its parts 
$url = parse_url($url); 
// check if requested file exists 
if (is_file($_SERVER['DOCUMENT_ROOT'].$url['path'])) { 
    // parse and merge URL parameters 
    parse_str($url['query'], $params); 
    $_GET = array_merge($_GET, $params); 
    // include resolved file 
    include $_SERVER['DOCUMENT_ROOT'].$url['path']; 
} else { 
    hedaer($_SERVER['SERVER_PROTOCOL'].' 404 Not Found'); 
} 
+0

목표는 좋은 URL을 얻는 것입니다. – Dykam

관련 문제