개발 꿀팁/PHP

PHP에서의 라우팅과 rewrite 사용

Jammie 2022. 7. 28. 12:34
반응형

1. 장면 소개:
1.url 단순화하여주소, 모두가 기억하기에 편리하다.

2. 검색 안내에 유리옵티마이제이션

3. 보안(사용자에게)웹 사이트의 디렉터리 구조를 볼 수 없습니다)

예: 예를 들어 내가 있는 곳main 컨트롤러의 bb 메서드를 라우트합니다.kk,이렇게 우리 a라벨 요청cp.xiaobudiu.top/k로 이동k,실제 요청은 cp.xiaobudiu.top/main/bb였다.

사실:우리는 할 수 있다.예를 들어, 경로를 문자열의 별칭으로 이해합니다.위,kk는 main/bb의 별명.




2. 라우팅 단독 사용url 은닉 디렉토리 구조 구현, url 최적화


1. 커넥터 정의

여기 cr이 사용되고 있습니다.ossphp 프레임, tp 프레임을 사용할 경우라라벨 프레임 등대응하는 설정 항목도 있다

비고: 이 경우 main 컨트롤러에 bb 메서드를 요청하면 url 주소 형식이 cp.xiaobudiu.top/main/bb/에서 cp.xiaobudiu.top/main-bb/로 변경됩니다.



2, 대응 컨트롤러 방법에 a 태그를 정의한다

비고: 만약 매개 변수를 전달해야 한다면, 문자열을 결합할 수 있습니다.

물론 프레임에 내장된 URL 주소를 사용하는 것이 좋습니다.방식 (동적으로 url을 생성하고 매개 변수 전달을 지원한다는 장점이 있음)

예:

3. 브라우저에서 생성된 url 주소는 다음과 같습니다

 

이때 a탭을 클릭하면 main 컨트롤러의 bb방식으로 넘어간다.



4. 프레임워크 라우팅을 통한 변화 url 구현, 디렉토리 구조 숨기기, url 최적화목적 [기타 프레임 유사]

주: 사실 루트는 별명일 뿐이지 너무 크게 생각하지 마세요.

예를 들어 위에서 main 컨트롤러의 bb 메서드를 kk로 라우팅하면우리가 cp.xiaobudiu.top/main-bb, cp.xiaobudiu.top/kk 요청을 하는 것은 모두 main 컨트롤러의 bb 메서드이다.



5. 태그 정의

비고: 이때 우리는 디렉토리 구조를 숨기고 url을 최적화하기 위해 a를 사용할 수 있다.태그의 href를 우리가 정의하는 경로 주소로 변경

예를 들어, main/bb 라우팅이 kk로 정의되어 있습니다.그래서 a라벨은 이렇게 씁니다.

다시 한 번 강조: 루트는 단지 별명일 뿐이다. 당신이 생각하는 url의 변화에 따라 달라진다.심경 정의의 길

6, 이때 생성된 a라벨 링크는 다음과 같다

a탭을 클릭하면 접속할 수 있습니다

이렇게 해서 우리는 url 주소를 변경하고, 디렉토리 구조를 숨기고, url을 최적화하는 것을 실현했다.




3. 라우팅과 nginx rewrite 규칙을 조합한 방식을 사용합니다(권장).


1. 라우팅과 nginx rewrite 규칙이 결합된 방식을 왜 사용해야 하는가

비고: 위에서 단순히 라우팅을 사용하여 url 주소를 변경하고, 디렉토리 구조를 숨기고, ur를 최적화합니다.l 목적, 그러나 실제 시나리오에서는 url 주소를 직접 지정하는 것이 아니라 프레임의 스킴을 통해 생성하는 것이 일반적이다.법은 url을 생성하고, url을 생성할 때는 반드시 원래의 제어기와 방법을 사용하지만, 직접 가는 것은 아니다.라우팅이라고 써있는데 이때 우리가 생성하는 url 포맷은

cp.xiaobudiu.top/main-bb, 우리기가 아닌cp.xiaobudiu.top/kk, 이렇게 하면 우리가 원하는 것에 도달할 수 없다.티베트 목차 구조의 목적.

이때 우리는 라우팅과 rwrite 규칙을 결합해야 한다

2. 원리:

(1) 우리 a 태그의 href는 프레임워크의 방법에 의해 생성된 url을 예로 들며, 생성 후의 url 주소 형식은 다음과 같다.

cp.xiaobudiu.top/main-bb

(2) 사용자가 a 태그를 클릭하면, 우리는 nginx의 rewrite 규칙을 통해 현재 url을 새로운 URL로 리디렉션합니다. 즉, 우리는 기대하고 있습니다.의 URL

예를 들어, nginx에서 rewrite 규칙을 정의하고 main-bb를 kk로 리디렉션합니다

location / {
   if (!-e $request_filename) {
       rewrite ^/main-bb-(\d+)/ /kk-$1/ permanent;
       rewrite ^/(.*)$ /index.php?$1 last;
   }
 
}

이때, a태그(href는 cp.xiaobudiu.top/main-bb)를 클릭하면 nginx 서버가 자동으로 cp.xiaobudiu.top/kk로 영구 리디렉션됩니다.

비고: kk의 위치를 찾을 수 없기 때문에 오류를 보고한다. (물론 찾을 수 없다, 우리는 아직 경로를 정의하지 않았다, main-bb의 별명을 kk라고 한다.)

(3) 라우팅 정의

 /**
     *라우팅 설정
     * 'index' => 'main:index'
     * main ->index의 별칭 index 지정
     * 컨트롤러와 메서드에 별칭을 지정하면 자동으로 별칭을 사용합니다
     */
    'router' => array(
        'kk'        =>  'main:bb',
        'help'      =>  'help:index',
    ),

(4) 이제 nginx가 리디렉션된 url cp.xiaobudiu.top/kk가 main 컨트롤러의 BB 방법을 자동으로 찾아내는 경로를 정의했기 때문에 우리의 목적을 달성했다

반응형