> 백엔드 개발 > PHP 튜토리얼 > yii2의 URL 규칙에서 문자열 형식의 ID로 경로를 구성하는 방법을 알려주십시오.

yii2의 URL 규칙에서 문자열 형식의 ID로 경로를 구성하는 방법을 알려주십시오.

WBOY
풀어 주다: 2016-08-18 09:16:12
원래의
1284명이 탐색했습니다.

배경:
URL 미화를 켰습니다. 현재 URL 규칙은 다음과 같습니다
URL:
example.com/site/view?id=06XBvOuYTbVE9pH8t%2FKJg%3D%3D
여기서 매개변수 ID의 값은 암호화됩니다

이 URL로 변경하고 싶습니다:
1. example.com/view/06XBvOuYTbVE9pH8t%2FKJg%3D%3D.html
어떻게 구성해도 작동하지 않습니다.
하지만 다음과 같이 작동합니다.
2. example.com/view/1199.html

2개의 라우팅 규칙은 매우 쉽게 일치합니다.

<code>rules => [
    'view/<id:\d+>' => 'site/view' // 好使
]</code>
로그인 후 복사
로그인 후 복사

그러나 라우팅 규칙 1은 어떻게 구성해도 작동하지 않습니다.

<code>rules => [
    'view/<id:[\w|%|=]+>' => 'site/view' // 不行
    'view/<id:.*+>' => 'site/view' // 不行
    'view/<id:.*>' => 'site/view' // 不行
    '/view/<id:[^.]*>.html'=>'site/view?id=<id>' // 不行
]</code>
로그인 후 복사
로그인 후 복사

규칙은 일반 규칙 d만 지원하나요?
이 효과를 갖도록 구성하는 방법은 무엇입니까?
온라인 대기

답글 내용:

배경:
URL 미화를 켰습니다. 현재 URL 규칙은 다음과 같습니다
URL:
example.com/site/view?id=06XBvOuYTbVE9pH8t%2FKJg%3D%3D
여기서 매개변수 ID의 값은 암호화됩니다.

이 URL로 변경하고 싶습니다:
1. example.com/view/06XBvOuYTbVE9pH8t%2FKJg%3D%3D.html
어떻게 구성해도 작동하지 않습니다.
하지만 다음과 같이 작동합니다.
2. example.com/view/1199.html

2개의 라우팅 규칙은 매우 쉽게 일치합니다.

<code>rules => [
    'view/<id:\d+>' => 'site/view' // 好使
]</code>
로그인 후 복사
로그인 후 복사

그러나 라우팅 규칙 1은 어떻게 구성해도 작동하지 않습니다.

<code>rules => [
    'view/<id:[\w|%|=]+>' => 'site/view' // 不行
    'view/<id:.*+>' => 'site/view' // 不行
    'view/<id:.*>' => 'site/view' // 不行
    '/view/<id:[^.]*>.html'=>'site/view?id=<id>' // 不行
]</code>
로그인 후 복사
로그인 후 복사

규칙은 일반 규칙 d만 지원하나요?
이 효과를 갖도록 구성하는 방법은 무엇입니까?
온라인 대기

위의 답변은 의미가 있습니다. %2F 표시는 URL이 /view/06XBvOuYTbVE9pH8t/FKJg%3D%3D.html이 되므로 /view/ 형식과 일치해서는 안 된다는 의미입니다.

게다가 이 계획은 직설적으로 말하면 바보일 뿐입니다. 친숙한 URL의 목적은 무엇입니까? 가독성을 높이고 SEO에 도움이 됩니다. 소위 암호화된 문자열이 이러한 효과를 줍니까? 이전에 최적화하지 않은 직접 ?id= 와 차이점이 있나요? 그냥 형식적인 얘기인데 재미있나요?

올바른 해결책은 /view/iphone-6s-gold와 같은 슬러그 필드를 사용하는 것입니다. 이것이 실제 최적화입니다.

다른 사람이 임의로 ID를 입력하는 것을 방지하기 위한 것이라고 말하지 마세요. 이는 말도 안 되는 일이며 더 이상 이유를 쓰고 싶지 않습니다. 그리고 슬러그 솔루션은 이 문제도 해결합니다.

%2F는 /로 처리될 것 같습니다. ID의 암호화 및 복호화 기능을 아웃소싱하고 %2F를 특별하게 처리할 수 있습니다(예: 대신 자리 표시자 설정).

1, 2를 묻는 건가요?
제목은 2, 내용은 1

<code>example.com/view/06XBvOuYTbVE9pH8t%2FKJg%3D%3D.html
array(
    '/view/<id:[^.]*>.html'=>'site/view?id=<id>'
)</code>
로그인 후 복사
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿