2011-09-28 6 views
0

예 : 나는 페이지가 페이지에있는 http://mysite.com?page=3&var=10 또한있다 페이지가있다.PHP를 사용하여 URL 변경

양식이 거기에 PHP에서 몇 가지 조치를 제출했을 때 양식을 어떻게 든 제출 한 후이 ?page=3&var=10을 제거해야합니다. mod_rewrite없이 모든 브라우저 물마루 PHP와 호환되는 방법이 있습니까?

+0

GET 대신 POST를 사용하면 제출 된 양식에서 매개 변수를 숨길 수 있습니다. –

+0

POST를 사용하도록 양식을 변환하지 않으려면 먼저 URL에 매개 변수가 없어야합니다. 또는 나중에 리디렉션 할 수 있습니다. –

+0

이 매개 변수는 양식이 아닌 페이지 매김에서 가져옵니다. – JohnA

답변

0

action=index.php을 사용하는 경우 모든 값은 색인 php에 게시되며 ?page=3&var=10은 자동으로 제거됩니다.

같은 페이지에 게시하려면 다음 중 하나를 수행 할 수 있습니다 사용 '행동 = index.php를? 페이지 = 3 & VAR = 10'또는 action=<?php echo $_SERVER['PHP_SELF'] ?>

뭔가 제출 한 경우 페이지의 시작 부분에서 확인하실 수 있습니다 header('Location: http://www.example.com/ '); 원하는대로 리디렉션하십시오. 헤더 함수에 대한 추가 정보 http://php.net/manual/en/function.header.php

+0

PHP_SELF는'$ _SERVER [ 'REQUEST_URI']'에있는 실제 uri의 경로와 반대로 php * 스크립트 *의 이름입니다. 그들은 본성과 목적이 완전히 다릅니다. 따라서'PHP_SELF'는 단일 PHP 스크립트가 수천 개의 다른 URL 경로를 나타낼 수있을 때 * 원본 * URL을 변경하는 데 유용한 정보가 아닙니다. – user3338098

0

이 기능이 유용합니까?

header('Location:/'); 
-1

그래, 해결책은 아주 간단합니다 (경우에도 정말 SEO 친화적 인)입니다 :

<?php 
header("Location: http://mysite.com") 
?> 

은 정보를 당신은 왜 필요합니까 ...?

+0

헤더를 사용하는 경우 exit를 사용하여 중간에 스크립트를 종료해야합니다. 또는 죽는다; – JohnA

+0

내가 아직도 빈 페이지로 리디렉션하고 양식에서 $ _POST없이 처음부터 다시 시작합니다. – JohnA

+0

브라우저를 리디렉션하기 전에 단순히 '$ _POST'데이터를 처리 할 수없는 이유는 무엇입니까? – ArtoAle

-1

mod_rewrite는 외부에서 볼 수있는 리디렉션을하지 않는 한 사용자 브라우저의 주소 표시 줄에 표시되는 내용에는 영향을 미치지 않습니다. 그렇지 않으면 웹 서버 내에서만 내용이 다시 쓰여지고 사용자에게는 보이지 않습니다.

사용자의 주소 표시 줄에 영향을 주려면 양식 처리가 완료된 후 header('Location: ...')을 통해 리디렉션을해야합니다.

0

parse_str을 사용하면 쿼리 문자열을 수정하기 쉬운 연관 배열로 사용할 수 있습니다. 그런 다음 http_build_query을 사용하여 연관 배열을 쿼리 문자열로 변환합니다.

$queryString = $s['QUERY_STRING']; 
$params = array(); 
parse_str($queryString, $params); 
//change $params as needed 
$queryString = http_build_query($params); 
if ($queryString) { 
    $queryString = '?'.$queryString; 
} 
return preg_replace("/\\?.*/s","",$s['REQUEST_URI']).$queryString; 

preg_replace("/\\?.*/s","",$s['REQUEST_URI'])은 대체 할 수 있도록 원래 쿼리 문자열을 제거합니다.

1

이 주제는 오래된 주제이지만 나중에 다른 사람이이 문제를 검색하는 경우 자바 스크립트 replaceState를 사용하여 기록 및 브라우저 바 라벨을 변경할 수 있습니다. 간단한 PHP 함수는이 작업을 수행합니다 : 다른 페이지를 호출 한 후

set_url("http://example.com"); 

페이지를 다시로드 또는 다시 :

function set_url($url) 
{ 
    echo("<script>history.replaceState({},'','$url');</script>"); 
} 

그리고 간단하게 (아마도 포스트 변수를 삭제) 원하는 URL이 함수를 호출 할 것 이제 새로운 URL 위치가 기록에 남습니다.

POST를 사용하면 좀 더 우아한 해결책이 될 수 있다고 생각하지만, GET을 사용해야하는 경우이 문제가 해결됩니다.