2014-10-20 4 views
0

나는 한두 달 동안 이론으로 공부하면서 htacces + regex 기술을 훈련하고 연습을하고 싶었다.htaccess + regex; 변수 전송 + URL 재 작성

<html> 
    <head> 
    </head> 
    <body> 
     <a href="2var.php?var1=one&var2=two">2var test</a><!--2var.php/one/two--> 
    </body> 
</html> 

다음과 같은 코드가 두 번째 파일이라는 2var.php : 그래서

<?php 

if($_GET["var1"] && $_GET["var2"]) 
{ 
    echo "both rechead"; 
} 
else 
{ 
    if($_GET["var1"] || $_GET["var2"]) 
     echo "one of them reached"; 
    else 
     echo "neither reached"; 
} 
?> 

그래서 것은 내가 다음 코드의 index.php라는 파일이있다 내가하고 싶었던 것은 변수를 보내고 동시에 URL을 편집 할 수 있는지 테스트하는 것입니다 (필자는 이것이 가능하고 그 것이 "커튼 뒤에서 일어나는 것"입니다). 그러나 나는 이것을 달성하기위한 올바른 사고 방식이나 노하우를 얻을 수 없습니다.

가, BTW htacces :

DirectoryIndex index.html index.php 
Options +FollowSymLinks 
RewriteEngine On 

RewriteRule ^\/?([a-z]+)\/([a-z]+).html$ 2var.php?var1=$1&var2=$2 

내 요점은하는 것입니다이 2var.php/하나/두 및 변수가 실제로 전달됩니다. 이제 나는 "도달하지 못했습니다"만받습니다.

편집 : 내가 로컬 호스트에 있으므로 연결 링크는 localhost/tests/index.php입니다. localhost/tests/var2.php? var1 = $ 1 & var2 = $ 2

+1

호기심에서 벗어나 한 줄의 코드를 작성하지 않고 한 달 동안 프로그래밍/스크립팅 자료를 어떻게 공부할 수 있습니까? –

+0

'내 요점은 2var.php/one/two'입니다. '/ one/two.html'에 대한 내용입니다. – Cheery

+1

@ rr- 바쁜 생활을하기 때문에 do), 나는 버스/지하철을 탈 때 휴대 전화로 앱으로 배웠다. 나는 PHP/CSS/HTML/JS/JQUERY가 될 수 있지만 더 많은 것을 배우기를 원한다. 끄기 주제 btw – Sashka

답변

1

당신은 2var.php/one/two을 잡고 싶다고하셨습니다.

사실은 2var.php이 이미 PHP 스크립트이므로, 실제로는 RewriteEngine이 필요하지 않습니다. RewriteEngine 및 해당 규칙을 사용하지 않고 스크립트를 방문하려고하면 작동하지만 정의되지 않은 색인 : var1에 대한 경고가 생성됩니다.

/one/two 부분에 $_GET에 액세스 할 수 없기 때문입니다. 대신, $_SERVER['PATH_INFO']이라는 변수에 저장됩니다.

예 - 2var.php을하면서, /test/2var.php/one/two 같은 URL을 방문 다음 포함 :

<?php 
var_dump($_SERVER['PATH_INFO']); 

의지 출력은 다음

string(8) "/one/two" 

당신은 스크립트 자체에서 정규 표현식이 구문을 분석 할 수 있습니다. 실제의 .htaccess 규칙 대하여


. 당신은 거의 맞았습니다. 그러나 ^으로 시작하여 정확히 일치하는 문자열을 /one/two.html의 형식으로 만듭니다. 이 경기는 전체 요청 URI에 발생하기 때문에, 가서 당신이 2var.php^을 대체하고 RewriteRule의는 다음과 같습니다 있도록 .html 부분을 제거하면 어떻게되는지보십시오 ^

RewriteRule 2var.php\/?([a-z]+)\/([a-z]+)$ 2var.php?var1=$1&var2=$2 

참고 부족합니다. 즉, 서버의 임의의 디렉토리에 2var을 넣을 수 있으며 여전히 작동합니다.


또한 나는 <a href="2var.php?var1=one&var2=two">으로 연결되는 것으로 나타났습니다. 규칙을 다시 작성한다는 것은 URL을 예쁘게 만드는 것이므로 <a href="2var.php/one/two"> (또는 원하는 다른 구문)에 직접 연결할 수 있습니다. 적절한 다시 쓰기 규칙을 사용하여이를 백업하는 한, 다시 쓰기 엔진이이 주소로 도착하는 요청을 처리하고 최종 스크립트에 이러한 요청을 보냅니다.

+0

으로 href를 생성하지 마십시오. 따라서^$의 사용법을 약간 잊어 버린 것 같습니다. 그래서 일반적으로 우리는 당신이 말했듯이, 질문의 약간 바보 같다고 말할 수 있습니다. var2.php는 이미 스크립트입니다. – Sashka