CodeIgniter URL
기본적으로 CodeIgniter의 URL은 검색 엔진과 인간 친화적으로 설계되었습니다. 동적 시스템과 동의어인 URL에 대한 표준 “쿼리 문자열” 접근 방식을 사용하는 대신 CodeIgniter는 segment-based 접근 방식을 사용합니다.
https://example.com/news/article/my_article
귀하의 URL은 URI Routing 기능을 사용하여 유연하게 정의할 수 있습니다.
URI Library 및 URL Helper에는 URI 데이터 작업을 쉽게 해주는 기능이 포함되어 있습니다.
URL 구조
기본 URL에는 호스트 이름만 포함됩니다.
기본 URL이 https://www.example.com/이고 다음 URL을 상상해 보세요.
https://www.example.com/blog/news/2022/10?page=2
우리는 다음 용어를 사용합니다:
용어 |
예제 |
설명 |
|---|---|---|
기본 URL |
https://www.example.com/ |
기본 URL은 종종 baseURL로 표시됩니다. |
URI 경로 |
/블로그/뉴스/2022/10 |
|
라우트 경로 |
/블로그/뉴스/2022/10 |
기본 URL에 상대적인 URI 경로입니다. URI string이라고도 합니다. |
쿼리 |
페이지=2 |
기본 URL에는 하위 폴더가 포함되어 있습니다.
기본 URL이 https://www.example.com/ci-blog/이고 다음 URL을 상상해 보세요.
https://www.example.com/ci-blog/blog/news/2022/10?page=2
우리는 다음 용어를 사용합니다:
용어 |
예제 |
설명 |
|---|---|---|
기본 URL |
https://www.example.com/ci-blog/ |
기본 URL은 종종 baseURL로 표시됩니다. |
URI 경로 |
/ci-blog/blog/news/2022/10 |
|
라우트 경로 |
/블로그/뉴스/2022/10 |
기본 URL에 상대적인 URI 경로입니다. URI string이라고도 합니다. |
쿼리 |
페이지=2 |
URI 보안
Added in version 4.4.7.
중요
v4.4.7 이전 버전에서 업그레이드하는 사용자는 이 기능을 사용하려면 app/Config/App.php에 다음을 추가해야 합니다.
public string $permittedURIChars = 'a-z 0-9~%.:_\-';
CodeIgniter는 악성 데이터가 애플리케이션에 전달될 가능성을 최소화하기 위해 URI 문자열(경로 경로)에 허용되는 문자를 상당히 제한합니다. URI에는 다음만 포함될 수 있습니다.
영숫자 텍스트(라틴 문자만)
물결표:
~백분율 기호:
%기간:
.콜론:
:밑줄:
_대시:
-공백: `` ``
참고
이 확인은 Router에 의해 수행됩니다. 라우터는 SiteURI 클래스가 보유한 URL 인코딩 값을 가져와 디코딩한 다음 허용되지 않는 문자열이 포함되어 있지 않은지 확인합니다.
허용되는 문자 추가
허용되는 문자는 Config\App::$permittedURIChars로 변경할 수 있습니다.
URI 경로에 유니코드를 사용하려면 해당 문자를 사용할 수 있도록 수정하세요. 예를 들어 Bengali를 사용하려면 app/Config/App.php에 다음 값을 설정해야 합니다.
public string $permittedURIChars = 'a-z 0-9~%.:_\-\x{0980}-\x{09ff}';
유니코드 범위의 전체 목록은 Wikipedia의 Unicode block에서 찾을 수 있습니다.
index.php 파일 제거
Apache 웹 서버를 사용하는 경우 기본적으로 URL에 index.php 파일이 필요합니다.
example.com/index.php/news/article/my_article
서버가 URL 재작성을 지원하는 경우 URL 재작성을 통해 이 파일을 쉽게 제거할 수 있습니다. 이는 서버마다 다르게 처리되지만 여기서는 가장 일반적인 두 가지 웹 서버에 대한 예를 보여 드리겠습니다.
아파치 웹 서버
Apache에는 mod_rewrite 확장이 활성화되어 있어야 합니다. 그렇다면 몇 가지 간단한 규칙으로 .htaccess 파일을 사용할 수 있습니다. 다음은 지정된 항목을 제외한 모든 항목이 리디렉션되는 “부정적” 방법을 사용하는 이러한 파일의 예입니다.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
이 예에서는 기존 디렉터리 및 기존 파일에 대한 요청 이외의 모든 HTTP 요청이 index.php 파일에 대한 요청으로 처리됩니다.
참고
이러한 특정 규칙은 모든 서버 구성에 적용되지 않을 수 있습니다.
참고
외부에서 액세스해야 하는 자산도 위 규칙에서 제외해야 합니다.
nginx
nginx에서는 위치 블록을 정의하고 try_files 지시문을 사용하여 위의 Apache 구성에서와 동일한 효과를 얻을 수 있습니다.
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
이는 먼저 URI와 일치하는 파일 또는 디렉터리를 찾은 다음(루트 및 별칭 지시문의 설정에서 각 파일의 전체 경로를 구성) 인수와 함께 index.php 파일에 요청을 보냅니다.