2013-05-29 2 views
0

.htaccess에 대한 간단한 질문을하고 싶습니다. 양식이 index.html이고 receiver.php으로 값을 전달하고 싶습니다. 을 http://localhost/demo/receiver.php?fid=jibberish 대신에 http://localhost/demo/receiver/jibberish을 출력하도록 어떻게 구성합니까?HTTP GET 매개 변수를 URI로 변경하도록 .htaccess를 구성하십시오.

에 http : // {여기서 host_name}

<form method="get" action="receiver.php"> 
    FID <input type="text" name="fid" value="jibberish"> <br> 
    <input type="submit" value="Submit"> 
</form> 

HTTP /demo/index.html : // {여기서 host_name}

<?php 
    echo $_GET['fid']; 
?> 

나 '/demo/receiver.php 힘든 시간을 보내고 있습니다. 여기 내 .htaccess 코드입니다.

<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteBase/
RewriteCond %{DOCUMENT_ROOT}/$1 -f 
RewriteRule ^/receiver.php$ /receiver.php?fid=$1 [PT] 
</IfModule> 
+0

당신이 원하는 것을 명확하지 않다. 나는 검색어없이'receiver.php? fid = $ 1' 대신'/ receiver/jibberish'와 같은 질의가없는 "pretty"URL을 보여 주지만, 마지막 하나는 리소스 (receiver)에 자동으로 매핑합니다. PHP). 그렇다면 가능한 일이지만,'$ 1' 역 참조가 가리키는 그룹은 무엇이며 왜'PT' 플래그를 사용하고 있습니까? 이 플래그는 디렉토리 별 컨텍스트에 포함되며 일반적으로 필요하지는 않습니다. $ 1이나 역 참조없이 폼에서 보낸 완전한 URL의 한 예를 추측 할 수 없습니다. –

+0

그것에 대해 사과드립니다. fid에 HTTP GET을 명확하게 나타내도록 URL을 업데이트했습니다. –

답변

2

mod_rewrite를 사용하고 httpd.conf을 통해 .htaccess로 다음 .htaccess에서 DOCUMENT_ROOT 디렉토리에이 코드를 넣어 : 당신이 그것을 잘 작동하는지 확인되면, R=301R=302을 대체

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(receiver)\.php\?fid=([^\s]+) [NC] 
RewriteRule^/%1/%2? [R=302,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(receiver)/(.+?)/?$ /$1.php?fid=$2 [L,NC,QSA] 

. mod_rewrite 규칙을 테스트하는 동안 R=301 (영구 리디렉션)을 사용하지 마십시오.

+0

@FranzNoel : 혹시'/ demo' 디렉토리에 또 다른 .htaccess가 있습니까? – anubhava

1

이 루트 디렉토리에 하나 개의 .htaccess 파일에서 작동합니다 :

Options +FollowSymlinks -MultiViews 
RewriteEngine On 
RewriteBase/

RewriteCond %{THE_REQUEST} /demo/receiver.php\?fid=([^&\s]+) [NC] 
RewriteRule .*   /demo/receiver/%1? [R=301,L,NC] 

RewriteCond %{REQUEST_URI} !receiver\.php [NC] 
RewriteRule ^demo/receiver/([^/]+)/? /demo/receiver.php?fid=$1 [L,NC] 
+0

이 솔루션을 이용해 주셔서 감사합니다. 그것은 많은 도움이되었습니다. 실제 문제가 반영되지 않았기 때문에 질문에서 URL을 변경하는 것에 대해 사과드립니다. 나는 그 전화 번호부에 힘든 시간을 보내고있다. –

+0

오케이. 마지막 업데이트로 질문을 보면, 대답에'/ demo' 디렉토리가없는 것을 볼 수 있습니다. 나는 그것을 적절하게 수정했다. –

+0

나는 그것을 시도했다. 하지만 여전히 http : // localhost/demo/receiver/jibberish 대신 http : // localhost/receiver/jibberish로 리디렉션됩니다. –

관련 문제