2011-12-10 1 views
4

저는 현재 개인 프로젝트를위한 매우 기본적인 CMS를 준비 중입니다. 내 자신의 교육만큼이나 그렇습니다. 내가 가진 한 가지 질문은 파일 확장자없이 url/permalinks를 얻는 방법입니다. get 변수를 사용하여 DB에서 데이터를 가져 오는 것을 이해하지만 www.url.com/?posttitle='blablabla 대신 www.url.com/posttitle과 같은 방식으로 어떻게 변환합니까?사용자 지정 CMS, 상업용 CMS와 같은 예쁜 퍼머 링크

또한 약간 다른 주제로 회원들과 회원 목록 (예 : craigslist)을 다루는 사이트를 개발하기위한 프레임 워크를 사용하기 쉽습니다.

저는 현재 wordpress 내에서 개발하고 있으며 상당히 능력이 있지만 기본 수준에서 OOPHP 및 사용자 정의 CMS 개발에 익숙하지 않습니다.

미리 도움을 청하십시오.

+0

가능한 [PHP 프레임 워크의 예쁜 URL] (http://stackoverflow.com/questions/8440490/pretty-urls-in-php-frameworks) – mario

+0

[웹 응용 프로그램 용 예쁜 URL] (http : //stackoverflow.com/questions/5142095/pretty-urls-for-web-application) – mario

답변

9

당신은 (일반적으로 그냥 index.php를 스크립트입니다) 프런트 컨트롤러로 모든 요청을 전달하는 htaccess로 파일을 사용하십시오 다음이 스크립트는 데이터베이스의 레코드에 들어오는 요청과 일치합니다.당신이 있다면

예를 들어, 데이터베이스 테이블은 네 개의 열이 pages라고 : id, title, slugcontent, 다음과 같은 것이 간단한 구현 ...이 아파치를 알려줍니다

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+)$ index.php/$1 [NC,L] 

모든 요청을하는 그 파일이나 방향이 아니며 index.php으로 보내주십시오.

귀하는 다음과 같이 의 index.php 다음 볼 수 있었다 :

<?php 
// Take request URI 
// Would be something like 'your-slug' 
$request = trim($_SERVER['REQUEST_URI'], '/'); 

// Set up database connection and attempt to match slug 
$sql = "SELECT * FROM pages WHERE slug = ? LIMIT 1"; 
$smt = $db->prepare($sql); 
$smt->execute(array($request)); 

$page = $smt->fetchObject(); 

if (! $page) { 
    // Page was not found matching slug 
    header('HTTP/1.1 404 Not Found'); 
    exit; 
} 

// Display matching page in a template 

여기에서, 당신은 다음에 구축 할 수 있습니다.

2

url rewriting (웹 사이트 디렉토리 구조의 루트에 .htaccess에 있음)을 통해 간단히 수행 할 수 있습니다.

예를 들어 모든 것을 index.php에 다시 쓰고 여기에서 구문 분석 할 수 있습니다.

URL의 URI 부분을 $_SERVER 변수 ("QUERY_STRING"또는 어떤 키가 포함되어 있는지 보려면 var_dump($_SERVER)에서 확인하십시오)에서 방금 가져옵니다. 여기

모든 것을 재 작성을위한 샘플 htaccess로 파일입니다

RewriteEngine on 
# rewrite everything except for assets to index.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule !\.(js|ico|gif|jpg|png|css)$ /index.php [L] 
2

파일이없는 확장은 일반적으로 URL 경로의 추상화의 결과를 -이게 무슨 뜻인지 응용 프로그램이 후 모든 것을 해석해야한다는 것입니다 URL을 입력하고이를 기반으로 데이터를 표시하십시오.

는 다음과 같은 고려 : 아파치가 /about-us라는 공용 폴더를 제공하기 위해 노력할 것이다 (예를 들어, 아파치에) 정상적인 HTTP 요청에

http://www.url.com/about-us

, 지정되지 않은 때문에, static index.php 파일.

CodeIgniter, CakePHP, Ruby on Rails 등과 같이 널리 사용되는 MVC 프레임 워크 중 하나 인 /about-us은 해당 페이지와 관련된 자산을로드하는 route와 일치합니다. 따라서 정적 페이지를로드하는 대신 데이터베이스에 누적되어 해당 페이지의 데이터를 가져 와서 템플릿을 잡고 동적으로 파일을 제공합니다. 이것이 본질적으로 "예쁜"URL을 얻는 한 가지 방법입니다.

자신 만의 롤을 만들려면 위의 프레임 워크 중 하나를 선택하는 것이 좋습니다. 그래도 이해하지 않고 사용하지 마십시오. 실행 프로세스가 무엇인지 느껴보십시오. 각 요청이 정확히 무엇인지 파악하십시오.

인증까지는 Devise 및 CanCan과 같은 몇 가지 옵션이 레일스에 있습니다. 이들은 기본적으로 미리 코딩 된 인증 모듈로서 쉽게 구성 할 수 있습니다.