복붙노트

어떻게 PHP에서 URL을 다시 작성합니까?

PHP

어떻게 PHP에서 URL을 다시 작성합니까?

PHP 응용 프로그램에서 URL 재 작성을 구현하려고합니다. 누군가가 PHP와 MySQL에서 URL 재 작성을 구현하는 단계별 절차를 공유 할 수 있습니까?

내 응용 프로그램에서 다음 URL 재 작성을 구현하려면 리디렉션하고 싶습니다.

1. http://example.com/videos/play/google-io-2009-wave-intro
2. http://example.com/videos/play/203/google-io-2009-wave-intro

1. http://example.com/videos/play.php?title=google-io-2009-wave-intro
2. http://example.com/videos/play.php?id=203

위의 방법으로 URL 재 작성을 구현하는 방법을 알려주십시오.

다음 두 가지 유형 중에서 SEO, 관리, 애플리케이션 시점에 따라 URL이 가장 좋은 것입니다.

1. http://example.com/videos/play/google-io-2009-wave-intro
2. http://example.com/videos/play/203/google-io-2009-wave-intro

해결법

  1. ==============================

    1.mod_rewrite에 대한 초보자 안내서.

    mod_rewrite에 대한 초보자 안내서.

    일반적으로 이것은 mod_rewrite 모듈 (호스트에서 이미 활성화되어있을 가능성이 높다)을 활성화 한 다음 웹 디렉토리에 .htaccess 파일을 추가하는 것 이상입니다. 일단 그 일을 마치면 몇 줄 밖에 안됩니다. 위에 링크 된 튜토리얼은 당신을 돌볼 것입니다.

    그냥 재미를 위해 다음은 다시 쓰기위한 Kohana .htaccess 파일입니다.

    # Turn on URL rewriting
    RewriteEngine On
    
    # Installation directory
    RewriteBase /rootDir/
    
    # Protect application and system files from being viewed
    RewriteRule ^(application|modules|system) - [F,L]
    
    # Allow any files or directories that exist to be displayed directly
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
    # Rewrite all other URLs to index.php/
    RewriteRule .* index.php/$0 [PT,L]
    

    이 작업은 모든 요청을 받아서 index.php 파일을 통해 채널로 전송합니다. 따라서 www.examplesite.com/subjects/php를 방문한 경우 실제로 www.examplesite.com/index.php?a=subjects&b=php를 방문 할 수 있습니다.

    이 URL이 매력적이라면 한 단계 더 나아가 MVC 프레임 워크 (모델, 뷰, 컨트롤러)를 살펴 보시기 바랍니다. 기본적으로 웹 사이트를 다음과 같은 기능 그룹과 같이 취급 할 수 있습니다.

    www.mysite.com/jokes

    public function jokes ($page = 1) {
      # Show Joke Page (Defaults to page 1)
    }
    

    또는 www.mysite.com/jokes/2

    public function jokes ($page = 1) {
      # Show Page 2 of Jokes (Page 2 because of our different URL)
    }
    

    첫 번째 슬래시가 함수를 호출하는 방법에 주목하십시오. 그 다음에 나오는 모든 함수는 해당 함수의 매개 변수를 채 웁니다. 정말 멋져서 웹 개발을 훨씬 더 재미있게 만들어줍니다!

  2. ==============================

    2.PHP만으로는 이것을 할 수 없습니다. mod_rewrite (아파치를 사용한다고 가정)를 살펴볼 필요가있다.

    PHP만으로는 이것을 할 수 없습니다. mod_rewrite (아파치를 사용한다고 가정)를 살펴볼 필요가있다.

  3. ==============================

    3.mod_rewrite 사용 :

    mod_rewrite 사용 :

    RewriteRule ^videos/play/([0-9]+)/([^.]+)$ play.php?id=$1&name=$2
    

    example.com/play.php?id=203&name=google-io-2009-wave-intro

    같이 작동합니다.

    example.com/videos/play/203/google-io-2009-wave-intro

  4. ==============================

    4.리디렉션은 다시 쓰기와 같지 않습니다.

    리디렉션은 다시 쓰기와 같지 않습니다.

    리디렉션은 서버가 요청을 수신하고 응답이 리디렉션으로 전송되는 경우입니다. 예를 들어 www.example.com/page 페이지를 요청합니다. 서버가 이것을 받으면 페이지 또는 서버가 브라우저로 리디렉션 명령을 자체 발행합니다. 리디렉션 명령은 기본적으로 "여기에 가십시오 : 새 페이지"라고 말합니다. PHP에서 이것은 header ( 'Location : newpage.html');

    다시 쓰기는 서버가 브라우저에서 요청을 수신 한 다음 일치하는 정규 표현식 목록에서 해당 사이트를 검색 할 때 발생합니다. 일치하는 것이 발견되면 해당 양식으로 URL이 다시 작성되고 그에 따라 응답됩니다. 예를 들어 요청 된 URL www.example.com/specificpage는 www.example.com/?loadpage=specificpage와 같이 (서버 측에서) 재 작성 될 수 있습니다. 브라우저는 다른 곳으로 가야한다는 헤더 정보를받지 못합니다.

  5. ==============================

    5.서버에서 지원하는 경우 (apache / mod_rewrite) .htaccess 파일을 사용하여 방문자를 방향 재 지정할 수 있습니다.

    서버에서 지원하는 경우 (apache / mod_rewrite) .htaccess 파일을 사용하여 방문자를 방향 재 지정할 수 있습니다.

    뭔가 (그냥 초안, 자신의 필요에 적응 ...) :

    RewriteEngine On
    RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)/([0-9]+)/([-0-9a-zA-Z]+)/?$ /$1/$2.php?id=$3 [L]
    

    두 번째 예를 보자.

  6. ==============================

    6.DokuWiki에 대한 자세한 설명은 제공하지 않으니 죄송 합니다만, DokuWiki를 살펴 보시기 바랍니다.

    DokuWiki에 대한 자세한 설명은 제공하지 않으니 죄송 합니다만, DokuWiki를 살펴 보시기 바랍니다.

    그것의 체제에서 그것은 3 개의 형태를 받아 들인다 :

    무료이므로 코드를 다운로드하고 탐색하면됩니다.

    참고로 아파치 리다이렉트가 가장 좋은 솔루션 일 가능성이 높지만 pure PHP PHP는 재 작성이 아파치만큼 쉽지 않은 IIS6 서버에서 코드가 실행될 때 유용합니다.

  7. ==============================

    7.불행히도, 그것은 PHP가 아니라 웹 서버에 달려 있습니다. 아파치 또는 다른 것을 사용하는지 여부에 따라 스크립트를 실행하기 전에이 작업을 수행해야합니다. mod_rewrite를 사용하고 예제 재 작성 규칙은 다음과 같습니다.

    불행히도, 그것은 PHP가 아니라 웹 서버에 달려 있습니다. 아파치 또는 다른 것을 사용하는지 여부에 따라 스크립트를 실행하기 전에이 작업을 수행해야합니다. mod_rewrite를 사용하고 예제 재 작성 규칙은 다음과 같습니다.

    <Directory "/home/www/html">
        RewriteEngine On
        RewriteBase /
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule ^(.*)$ /index.php/%{REQUEST_URI} [PT,L]
    </Directory>
    

    위의 규칙은 기본적으로 URL이 실제 파일이나 디렉토리에 대한 유효한 경로 인 경우로드합니다. 그렇지 않으면 index.php를 통해 실행하십시오.

  8. ==============================

    8.덧글과 질문을 다시 한 번 읽은 후에, 나는 이전의 대답이 당신이 찾고있는 것과 완전히 다르지 않다는 것을 깨달았습니다. 여기에 몇 가지 추가 사항이 있습니다. 예를 들어 URL 주소를 다시 작성 / 리디렉션하려는 경우 사용자 유형 www.f1.com은 실제로 www.f2.com을 볼 수 있지만 도메인은 동일하게 유지됩니다. 아파치를 사용하는 역방향 프록시. 그것은 mod_rewrite와 유사합니다.

    덧글과 질문을 다시 한 번 읽은 후에, 나는 이전의 대답이 당신이 찾고있는 것과 완전히 다르지 않다는 것을 깨달았습니다. 여기에 몇 가지 추가 사항이 있습니다. 예를 들어 URL 주소를 다시 작성 / 리디렉션하려는 경우 사용자 유형 www.f1.com은 실제로 www.f2.com을 볼 수 있지만 도메인은 동일하게 유지됩니다. 아파치를 사용하는 역방향 프록시. 그것은 mod_rewrite와 유사합니다.

    두 번째 부분에 대해서는 현대 크롤러가 URL 링크 분석을 수행하기 때문에 첫 번째 옵션이 성능면에서 현명한 방법이라고 생각합니다.

    이전 답변 : PHP를 사용하면 리디렉션을 다음과 같이 할 수 있습니다.

    <?php
    // Here you can parse the current location
    // and decide whenever you want to go
    // if $_SERVER[ 'PHP_SELF'] some conditions then....
    header('Location: http://www.example.com/');
    ?>
    

    php.net에서. 여기에 더 많은 예제가 있습니다.

  9. ==============================

    9.프론트 컨트롤러를 사용하여 위의 제안과 약간 다르게 접근 할 수 있습니다. 프론트 컨트롤러는 커스텀 URL을 작성하기위한 일반적인 솔루션이며 PHP뿐만 아니라 모든 언어로 사용됩니다. 다음은 안내서입니다. http://www.oreillynet.com/pub/a/php/2004/07/08/front_controller.html

    프론트 컨트롤러를 사용하여 위의 제안과 약간 다르게 접근 할 수 있습니다. 프론트 컨트롤러는 커스텀 URL을 작성하기위한 일반적인 솔루션이며 PHP뿐만 아니라 모든 언어로 사용됩니다. 다음은 안내서입니다. http://www.oreillynet.com/pub/a/php/2004/07/08/front_controller.html

    본질적으로 모든 URL에 대해 호출되는 index.php 파일을 작성하면 URL 구문을 분석하고 URL의 내용에 따라 실행할 코드를 결정합니다. 예를 들어 사용자는 http://example.com/index.php/videos/play/203/google-io-2009-wave-intro와 같은 URL을 사용하고 index.php는 URL (/ videos / play / 203 / google-io-2009-wave-intro) 첫 번째 부분을 가져 와서 해당 이름 (videos.php 또는 play.php를 사용하도록 만들 수 있음)을 사용하여 PHP 파일을로드하고 매개 변수를 전달합니다 203 and google-io.

    그것은 효과적으로 mod_rewrite에서 코드를 재 작성하는 것과 같은 일을하지만 몇 가지 이점이 있습니다 :

    mod_rewrite를 사용하여 URL에서 index.php를 제거 할 수 있습니다 (http://www.wil-linssen.com/expressionengine-removing-indexphp/).

  10. from https://stackoverflow.com/questions/1039725/how-to-do-url-re-writing-in-php by cc-by-sa and MIT license