2011-04-19 4 views
0

.htaccess 파일에서 URL 서식을 지정하는 검색 엔진 스크립트가 있습니다. 그러나 사이트에서 검색을 수행하면 검색 URL의/search/QUERY % 20TERMS/1 /이 (가)됩니다. (각 단어 사이에 % 20이 있음을 알 수 있습니다.) PHP 또는 .htaccess와 함께 % 20 대신 +를 사용할 수 있습니까?.htaccess 및 PHP로 URL 서식 지정

.htaccess 코드가 현재 있습니다. SERP URL 형식을 지정합니다.

RewriteEngine on 
RewriteRule ^search/([^/]+)/([^/]+)/?$ search.php?q=$1&category=web&d=$2 
RewriteRule ^search/([^/]+)/$ /search/$1/1/ [R=301,L] 
RewriteRule ^search/([^/]+)$ /search/$1/1/ [R=301,L] 
RewriteRule ^search/?$/[R=301,L] 

그리고 내 PHP 코드는 현재입니다. 복잡한 URL 구조를 가지고 있기 때문에 검색 상자가 올바른 SERP로 이동합니다.

<?PHP 
if(isset($_POST['q'])) 
{ 
    header('location: search/' . $_POST['q'] . '/1/'); 
    exit(); 
} 
?> 

PHP 또는 .htaccess에서 URL이 % 20 대신 +가되도록하려면 어떻게해야합니까?

어떤 도움을 주셔서 감사합니다. 미리 감사드립니다. 캘럼

+0

어떻게 당신이 사이트에서 검색을 시작? –

답변

1

할 수 있습니다 단지 urlencode() (man page) 그것과 같이 당신의 리디렉션을 수행하기 전에 :이 htaccess로 또는 mod_rewrite를 함께 할 아무것도하지 않는

<?PHP 
if(isset($_POST['q'])) 
{ 
    header('location: search/' . urlencode($_POST['q']) . '/1/'); 
    exit(); 
} 
?> 

. 그것은 처음에 정확한 형식으로 서버에 전달되는 URL에 관한 것입니다.

1

urlencode()의 대안은 다른 문자를위한 공간을 음역하는 것입니다. 예를 들어 wikipedia는 공백 대신에 _ 밑줄을 사용합니다. 이는 urlencode의 +보다 좋을 것입니다.

header('location: search/' . (strtr($_POST['q'], " ", "_")) . '/1/'); 
// actually you should still apply urlencode() for other special chars 

물론이 검색 스크립트에서 동일하게 취소 필요로 :

$q = strtr($_GET["q"], "_", " ");