Rev. 2.73

URL에 모드-리라이트(mod_rewrite) 를 적용했습니다. 이 것은 URL에 재작성 규칙을 설정하여 보다 직관적이고 접근성이 좋은 모양으로 변형하여 라우팅합니다. 예를들어 "firejune.com/index.php?pl=1053" 과같은 지저분한 URL을 "firejune.com/1053"과 같이 쓸수 있게 해 줍니다. 자세한 사용법은 apache.org의 doc을 참조하시기 바랍니다.

이제 태터툴즈 클래식에서도 멋진 URL을 사용할 수 있게 되었습니다. 주요 URL만 적용했으며, 조금 더 복잡하고 조잡한 페이징이나 카테고리 등은 집어 치웠습니다. 대부분 정규식과 비슷한 문법으로 처리되기 때문에 꽤나 긴 삽질이 필요하더군요. 이곳에 적용한 .htaccess 파일의 일부분을 공개합니다.(이상한 곳이 있으면 지적해 주세요) 작업시 주의해야 할 점은 mod_rewrite가 모든 서버환경에 기본으로 채택되어 있지 않기 때문에 먼저 가능여부를 알아야 합니다. 둘째로 종전의 URL방식으로 접근 했을때 차단되어서는 안되기 때문에 하위 호환성을 유지해야 한다는 점입니다.

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ $1/ [L]
RewriteRule ^$ index.php [L]
RewriteRule ^index\.html$ / [L]

RewriteRule ^(images|medias)/(.*)$ public/$1/$2 [L]
RewriteRule ^(.*)favicon\.ico$ public/favicon.ico [L]
RewriteRule ^(.*)index\.gif$ public/index.gif [L]
RewriteRule ^(.*)sound-config\.xml$ public/sound-config\.xml [L]

RewriteRule ^(([0-9]+)|([0-9]+)&(.*))$ index.php?pl=$1 [L]
RewriteRule ^tag/(.*)$ index.php?stag=$1 [L]
RewriteRule ^page/(.+)$ index.php?page=$1 [L]
RewriteRule ^search/(.*)$ index.php?stext=$1 [L]
RewriteRule ^trackback/(.+)$ rserver.php?mode=tb&sl=$1 [L]
RewriteRule ^archive/(([0-9]+)|([0-9]+)&(.+))$ index.php?setdate=$1&$2 [L]
RewriteRule ^entries/(.+)$ index.php?ct1=$1 [L]
RewriteRule ^guestbook/(.+)$ index.php?md=guest&$1 [L]
RewriteRule ^tags/([0-9]+)$ index.php?md=tag&sort=$1 [L]

RewriteRule ^rss index.xml [L]
RewriteRule ^entries index.php?page=1&ct1=-1 [L]
RewriteRule ^projects index.php?stag=프로젝트 [L]
RewriteRule ^photos index.php?md=photo [L]
RewriteRule ^tags index.php?md=tag [L]
RewriteRule ^guestbook index.php?md=guest [L]
RewriteRule ^profile index.php?pl=777 [L]

Comments

RadRails의 파일 인클루드 방식을 자바스크립트로 흉내내어 보았습니다. 인자로 파일명을 문자배열로 넘기면 순차적으로 로드합니다. Prototype.js를 사용하며 Ajax로 구현된 별도의 페이지에 필요한 라이브러리를 개별적으로 로드할 때 사용하면 편리합니다.

/**
  * Include javascript and stylesheet tags
  * Usage = Include.JS||CSS('fileName' || ' file Name1, fileName2 , fileName3');
  * @author firejune<firejune.com>
  */

var Include = {
    getArray: function (files){
        var array = new Array();
        files.split(',').each(function (fileName){
            fileName = fileName.replace(/^\s/, '').replace(/\s$/, '');
            array.push(fileName);
        });
        return array;
    },
    JS: function (files){
        this.getArray(files).each(function (fileName){
            var JS  = document.createElement('script');
            JS.type = 'text/javascript';  
            JS.src  = '/javascripts/' + fileName + '.js';   //Path of your Javascript files
            document.getElementsByTagName('head')[0].appendChild(JS);
        });
    },
    CSS: function (files){
        this.getArray(files).each(function (fileName){
            var CSS   = document.createElement('link');
            CSS.rel   = 'stylesheet';
            CSS.type  = 'text/css';
            CSS.href  = '/stylesheets/' + fileName + '.css'; //Path of your Stylesheet files
            CSS.media = 'screen';
            document.getElementsByTagName('head')[0].appendChild(CSS);
        });
    }
};

Include.JS(' file Name1, fileName2 , fileName3');

덧. 자바스크립트 동적호출 구현하기 프로젝트로 이어집니다.

Comments