2010-03-22 3 views
3

친숙한 URL을 수동으로 만드는 방법은 무엇입니까? (PHP) 그래서 간단한 문자열을 요청한 echos 파일을 만들었습니다. 이제 형태가 있습니다 echo.php?string=bla+bla+bla&font=times 제가 좋아할 것 같아요 echo/bla+bla+bla/times 어떻게 그런 일을 (외부 libs 사용하지)?친숙한 URL을 수동으로 만드는 방법은 무엇입니까? (PHP)

답변

2

당신은 쉽게 당신을 위해 더 쉬울 수 있습니다 PHP로 관리를 재 작성 URL, 이동할 수 있습니다 rewrite.php에서

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . rewrite.php [L] 

을 당신은 정규식 URL의 배열을 가지고 패턴. 이것들은 현재의 URL ($_SERVER['REQUEST_URI'])을 일치시키고 URL의 일부를 실제 파일로 넘기는 데 사용될 수 있습니다. 그런 다음 매개 변수를 $_GET 배열에 넣을 수 있으며 올바른 파일을 포함 할 수 있습니다.

예를 들어, 배열은 다음과 같이 수 :

$rules = array(
    array(
     'articles/view/([0-9]+)', 
     'articles.php?id=$1' 
    ), 
    array(
     'articles/delete/([0-9]+)', 
     'articles.php?id=$1&action=delete' 
    ), 
); 
+0

필자는 약간 늦었다는 것을 알지만,이 스타일의 팬이 아니라는 이유는 PHP의 'mod_rewrite'구문과 똑같은 것 같지만 PHP에서 다시 구현된다는 것입니다. 실제로 바퀴를 다시 짓는 것 같아요. 물론, 단일 PHP 파일보다는 컨트롤러 액션으로 라우팅하는 MVC 스타일처럼 PHP 라우터가 적절한 경우가 있습니다. 그렇지만, 똑같은 일을하는'mod_rewrite'를 고수하십시오. – Matchu

+0

그러나 사용하는 서버 시스템에 관계없이 작동해야하는 소프트웨어를 만드는 경우 특히 유용합니다. 물론 위에서 언급 한 mod_rewrite 규칙을 추가해야하지만 전체 경로 목록보다 다른 서버 (예 : lighttpd)에서 복제하는 것이 훨씬 쉽습니다. 미성년자 일 수도 있지만 유용하다고 생각합니다. 물론, 이보다 더 고급 시스템을 만들 수 있습니다 (mod_rewrite와 유사). – Franz

2

echo.phpecho으로 바꾸려면 웹 서버용 다시 쓰기 기능을 사용해야합니다. 아파치를 사용하고 있다면 mod_rewrite이 왕이다.

나머지 부분은 $_SERVER['REQUEST_URI']regex으로 구문 분석하면됩니다. mod_rewrite를 사용하여이 부분을 수행 할 수도 있지만 옵션이 아닌 경우 PHP에서 직접 수행 할 수 있습니다.

+0

문제가있다 "나머지는"확실히 그렇게 쉬운 일이 아니다. mod_rewrite 나 비슷한 것을 아파치와 다른 서버에서 사용해야 PHP를 사용하여 다시 쓰기 작업을 할 수 있습니다 (물론'index.php/article/id/123' 라인을 따라 뭔가 다른 것을 말할 때를 제외하고).) – Franz

+1

@Franz mod_rewrite가 옵션이 아니라면,'echo.php/bla + bla + bla/times'를 받아 들일 수 있고 PHP 만 사용하여 파싱 할 수 있습니다. 또는 하이브리드 솔루션 인 mod_rewrite를 사용하여'echo/anything'을'echo.php/anything'에 재 작성한 다음 PHP 기반 URL 구문 분석을 사용할 수 있습니다.또는 mod_rewrite를 독점적으로 사용할 수도 있습니다. – Dathan

+0

의미가 있습니다. 명확히 해 주셔서 감사합니다. – Franz

5

이것은 일반적으로 mod_rewrite 아파치 확장으로 이루어집니다.

RewriteEngine On 
RewriteRule ^echo/(.+?)/(.+)$ echo.php?string=$1&font=$2 [L] 

첫 번째 줄은 mod_rewrite을 활성화 : 같은 htaccess로 파일에서, 당신이 뭔가를 넣어 것입니다. 두 번째는 regular expression을 설정하여 해당 패턴과 일치하는 요청을 원하는 PHP 파일로 라우팅합니다.

1

새로운 젠드 프레임 워크 프로젝트에서 생성 된 .htaccess 파일을 살펴보십시오. 나머지 프레임 워크없이 사용하거나 자체 URL 재 작성 메소드의 예제로 사용할 수 있습니다.

0

mod_rewrite를 통해 URL을 다시 쓰는 대신 php 파일을 404 오류 처리기로 설정할 수 있습니다. 이 파일은 URL을 분석하고 URL 처리 방법을 결정할 수 있습니다.

$path_parts = explode('/', $_SERVER['PATH_INFO']); 
echo $path_parts[0]. ', '.$path_parts[1].' font'; 

성능상의 이유로, 당신은 처리를 위해 PHP로 (즉, GIF, JPG, PNG 등) 특정 파일 형식을 보내지 않도록 아파치를 구성 싶지 않을 것이다.

응답에서 언급 한 것처럼 수행 할 수있는 여러 가지 작업이 있지만 웹 서버의 구성을 조정하지 않으면 작업을 수행 할 수 없습니다. 아주 간단한한다 RewriteRule과 함께, 404 핸들러의 아이디어와 유사

+0

올바른 헤더 ('HTTP 200')를 보내는 것을 잊지 마십시오. 내가 기억하는 한, 일부 서버는 404 오류 처리기를 사용할 때 자동으로'404' 헤더를 보냅니다. – Franz

관련 문제