selected ads

FREE Reseller Hosting Program, Simple Business Model, Time-proven Network, FREE to Join!

Monday, September 21, 2009

Rewrite Rule Rewrite Cond

I have to put aside my experiment with OsCommerce for a while. I need to learn more about url rewriting, because there is a need in my project.

So this is the content of .htaccess file:

RewriteBase /
DirectoryIndex home.php
RewriteEngine On

ErrorDocument 404 /home.php

# >> DOES NOT HAVE QUERY STRING?
RewriteCond %{QUERY_STRING) ""

RewriteRule ^(.+)=(.+) $1/$2
RewriteRule ^search/(.+)/(.+)/$ search.php?$1=$2

# >> capture both having trailing / and not
RewriteRule ^search/(.+)/(.+)$ search.php?$1=$2 [L]
RewriteRule ^search/(.?)$ search.php [L]

# >> HAS QUERY STRING? and it is right behind / !!!
RewriteCond %{THE_REQUEST} \s(.+)/\?(.+)\s
RewriteRule ^(.*)/?$ %1/%2?
RewriteRule ^(.+)=(.+) $1/$2 [R]

# >> HAS QUERY STRING?
RewriteCond %{QUERY_STRING) ^(.+)/$
RewriteRule ^search(.+)=(.+) search/$1/$2 [L]


http://mesin-uang.local/search/
will make a flow like this:


127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23ca1f8/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] add path info postfix: D:/xampp/htdocs/mesin-uang/search -> D:/xampp/htdocs/mesin-uang/search/
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23ca1f8/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search/ -> search/
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23ca1f8/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^(.+)=(.+)' to uri 'search/'
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23ca1f8/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] add path info postfix: D:/xampp/htdocs/mesin-uang/search -> D:/xampp/htdocs/mesin-uang/search/
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23ca1f8/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search/ -> search/
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23ca1f8/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^search/(.+)/(.+)/$' to uri 'search/'
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23ca1f8/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] add path info postfix: D:/xampp/htdocs/mesin-uang/search -> D:/xampp/htdocs/mesin-uang/search/
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23ca1f8/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search/ -> search/
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23ca1f8/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^search/(.+)/(.+)$' to uri 'search/'
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23ca1f8/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] add path info postfix: D:/xampp/htdocs/mesin-uang/search -> D:/xampp/htdocs/mesin-uang/search/
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23ca1f8/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search/ -> search/
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23ca1f8/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^search/(.?)$' to uri 'search/'
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23ca1f8/initial] (2) [perdir D:/xampp/htdocs/mesin-uang/] rewrite 'search/' -> 'search.php'
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23ca1f8/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] add per-dir prefix: search.php -> D:/xampp/htdocs/mesin-uang/search.php
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23ca1f8/initial] (2) [perdir D:/xampp/htdocs/mesin-uang/] trying to replace prefix D:/xampp/htdocs/mesin-uang/ with /
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23ca1f8/initial] (5) strip matching prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23ca1f8/initial] (4) add subst prefix: search.php -> /search.php
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23ca1f8/initial] (1) [perdir D:/xampp/htdocs/mesin-uang/] internal redirect with /search.php [INTERNAL REDIRECT]
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23c88e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23c88e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^(.+)=(.+)' to uri 'search.php'
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23c88e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23c88e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^search/(.+)/(.+)/$' to uri 'search.php'
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23c88e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23c88e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^search/(.+)/(.+)$' to uri 'search.php'
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23c88e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23c88e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^search/(.?)$' to uri 'search.php'
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23c88e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23c88e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^(.*)/?$' to uri 'search.php'
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23c88e8/initial/redir#1] (4) [perdir D:/xampp/htdocs/mesin-uang/] RewriteCond: input='GET /search/ HTTP/1.1' pattern='\s(.+)/\?(.+)\s' => not-matched
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23c88e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23c88e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^(.+)=(.+)' to uri 'search.php'
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23c88e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23c88e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^search(.+)=(.+)' to uri 'search.php'
127.0.0.1 - - [21/Sep/2009:19:37:12 +0700] [mesin-uang.local/sid#11932d8][rid#23c88e8/initial/redir#1] (1) [perdir D:/xampp/htdocs/mesin-uang/] pass through D:/xampp/htdocs/mesin-uang/search.php


and
http://mesin-uang.local/search/?key1=value1
will be translated into
http://mesin-uang.local/search/key1/value1
and the flow is like this:


127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677f138/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] add path info postfix: D:/xampp/htdocs/mesin-uang/search -> D:/xampp/htdocs/mesin-uang/search/
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677f138/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search/ -> search/
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677f138/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^(.+)=(.+)' to uri 'search/'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677f138/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] add path info postfix: D:/xampp/htdocs/mesin-uang/search -> D:/xampp/htdocs/mesin-uang/search/
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677f138/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search/ -> search/
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677f138/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^search/(.+)/(.+)/$' to uri 'search/'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677f138/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] add path info postfix: D:/xampp/htdocs/mesin-uang/search -> D:/xampp/htdocs/mesin-uang/search/
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677f138/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search/ -> search/
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677f138/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^search/(.+)/(.+)$' to uri 'search/'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677f138/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] add path info postfix: D:/xampp/htdocs/mesin-uang/search -> D:/xampp/htdocs/mesin-uang/search/
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677f138/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search/ -> search/
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677f138/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^search/(.?)$' to uri 'search/'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677f138/initial] (2) [perdir D:/xampp/htdocs/mesin-uang/] rewrite 'search/' -> 'search.php'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677f138/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] add per-dir prefix: search.php -> D:/xampp/htdocs/mesin-uang/search.php
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677f138/initial] (2) [perdir D:/xampp/htdocs/mesin-uang/] trying to replace prefix D:/xampp/htdocs/mesin-uang/ with /
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677f138/initial] (5) strip matching prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677f138/initial] (4) add subst prefix: search.php -> /search.php
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677f138/initial] (1) [perdir D:/xampp/htdocs/mesin-uang/] internal redirect with /search.php [INTERNAL REDIRECT]
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677a370/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677a370/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^(.+)=(.+)' to uri 'search.php'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677a370/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677a370/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^search/(.+)/(.+)/$' to uri 'search.php'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677a370/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677a370/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^search/(.+)/(.+)$' to uri 'search.php'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677a370/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677a370/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^search/(.?)$' to uri 'search.php'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677a370/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677a370/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^(.*)/?$' to uri 'search.php'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677a370/initial/redir#1] (4) [perdir D:/xampp/htdocs/mesin-uang/] RewriteCond: input='GET /search/?key1=value1 HTTP/1.1' pattern='\s(.+)/\?(.+)\s' => matched
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677a370/initial/redir#1] (2) [perdir D:/xampp/htdocs/mesin-uang/] rewrite 'search.php' -> '/search/key1=value1?'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677a370/initial/redir#1] (3) split uri=/search/key1=value1? -> uri=/search/key1=value1, args=
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677a370/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^(.+)=(.+)' to uri '/search/key1=value1'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677a370/initial/redir#1] (2) [perdir D:/xampp/htdocs/mesin-uang/] rewrite '/search/key1=value1' -> '/search/key1/value1'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677a370/initial/redir#1] (2) [perdir D:/xampp/htdocs/mesin-uang/] explicitly forcing redirect with http://mesin-uang.local/search/key1/value1
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677a370/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^search(.+)=(.+)' to uri 'http://mesin-uang.local/search/key1/value1'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677a370/initial/redir#1] (2) [perdir D:/xampp/htdocs/mesin-uang/] trying to replace prefix D:/xampp/htdocs/mesin-uang/ with /
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677a370/initial/redir#1] (1) [perdir D:/xampp/htdocs/mesin-uang/] escaping http://mesin-uang.local/search/key1/value1 for redirect
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#677a370/initial/redir#1] (1) [perdir D:/xampp/htdocs/mesin-uang/] redirect to http://mesin-uang.local/search/key1/value1 [REDIRECT/302]
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#6773110/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] add path info postfix: D:/xampp/htdocs/mesin-uang/search -> D:/xampp/htdocs/mesin-uang/search/key1/value1
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#6773110/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search/key1/value1 -> search/key1/value1
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#6773110/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^(.+)=(.+)' to uri 'search/key1/value1'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#6773110/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] add path info postfix: D:/xampp/htdocs/mesin-uang/search -> D:/xampp/htdocs/mesin-uang/search/key1/value1
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#6773110/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search/key1/value1 -> search/key1/value1
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#6773110/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^search/(.+)/(.+)/$' to uri 'search/key1/value1'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#6773110/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] add path info postfix: D:/xampp/htdocs/mesin-uang/search -> D:/xampp/htdocs/mesin-uang/search/key1/value1
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#6773110/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search/key1/value1 -> search/key1/value1
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#6773110/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^search/(.+)/(.+)$' to uri 'search/key1/value1'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#6773110/initial] (2) [perdir D:/xampp/htdocs/mesin-uang/] rewrite 'search/key1/value1' -> 'search.php?key1=value1'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#6773110/initial] (3) split uri=search.php?key1=value1 -> uri=search.php, args=key1=value1
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#6773110/initial] (3) [perdir D:/xampp/htdocs/mesin-uang/] add per-dir prefix: search.php -> D:/xampp/htdocs/mesin-uang/search.php
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#6773110/initial] (2) [perdir D:/xampp/htdocs/mesin-uang/] trying to replace prefix D:/xampp/htdocs/mesin-uang/ with /
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#6773110/initial] (5) strip matching prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#6773110/initial] (4) add subst prefix: search.php -> /search.php
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#6773110/initial] (1) [perdir D:/xampp/htdocs/mesin-uang/] internal redirect with /search.php [INTERNAL REDIRECT]
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#67801e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#67801e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^(.+)=(.+)' to uri 'search.php'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#67801e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#67801e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^search/(.+)/(.+)/$' to uri 'search.php'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#67801e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#67801e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^search/(.+)/(.+)$' to uri 'search.php'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#67801e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#67801e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^search/(.?)$' to uri 'search.php'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#67801e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#67801e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^(.*)/?$' to uri 'search.php'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#67801e8/initial/redir#1] (4) [perdir D:/xampp/htdocs/mesin-uang/] RewriteCond: input='GET /search/key1/value1 HTTP/1.1' pattern='\s(.+)/\?(.+)\s' => not-matched
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#67801e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#67801e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^(.+)=(.+)' to uri 'search.php'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#67801e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] strip per-dir prefix: D:/xampp/htdocs/mesin-uang/search.php -> search.php
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#67801e8/initial/redir#1] (3) [perdir D:/xampp/htdocs/mesin-uang/] applying pattern '^search(.+)=(.+)' to uri 'search.php'
127.0.0.1 - - [21/Sep/2009:19:38:40 +0700] [mesin-uang.local/sid#11932d8][rid#67801e8/initial/redir#1] (1) [perdir D:/xampp/htdocs/mesin-uang/] pass through D:/xampp/htdocs/mesin-uang/search.php


There is still other possibilities.

http://mesin-uang.local/search/
http://mesin-uang.local/search/key1/value1/
http://mesin-uang.local/search/?key1=value1
http://mesin-uang.local/search.php
http://mesin-uang.local/search.php?key1=value1

Too many possibilities? Maybe. But it's really challenging if we can make a ruleset (in one single htaccess) that works for all.

Thursday, September 17, 2009

Begin Templating - Step 1

Now I want to start templating. A brief overview of Oscommerce templating can be found here.

My first impression is that Oscommerce version 3 is far better than version 2. Version 3 had employed template, using object oriented, better installation process, and many more improvements. But I feel that the files are (still) scattered in the designed directory structure. Compared to other cms framework (such as Joomla, Drupal, even Wordpress), IMHO, they provide better way to manage template files.

It seems, Oscommerce customization is intended for developers. Not end user.

What I do first, as I learning by doing, is copy and rename downloaded template files.

I need to:
- make a folder under oscommerce's root folder, like this: [oscommerce3_root]/templates/[my_template]
- create [my_template].php, also in [oscommerce3_root]/templates/
- create [my_template].php inside [oscommerce3_root]/admin/includes/templates/

Then inside [oscommerce3_root]/admin/includes/templates/[my_template].php, I need to edit class osC_Template_batik_lovers_01 to define groups. Groups is term for content area in pages. I made it like this:


class osC_Template_batik_lovers_01 {
var $_id,
$_title = 'batik_lovers_01',
$_code = 'batik_lovers_01',
$_author_name = 'freeoscommerce.com',
$_author_www = 'http://www.freeoscommerce.com',
$_markup_version = 'XHTML 1.0 Transitional',
$_css_based = '1', /* 0=No; 1=Yes */
$_medium = 'Screen',
$_groups = array('boxes' =>
array(
'search-box', 'language-box',
'user-menu', 'sidebar-top', 'sidebar-bottom',
'content-top', 'content-bottom',
'left', 'top_right'),
'content' => array('before', 'after')),


This php file also serve as template installer. There is $data in function install(), and I made it look like this:


$data = array('categories' => array('products/*', 'content-top', '100'),
'manufacturers' => array('products/*', 'content-top', '200'),
'whats_new' => array('*', 'sidebar-bottom', '300'),
'search' => array('*', 'search-box', '300'),
'information' => array('*', 'content-bottom', '500'),
'shopping_cart' => array('*', 'left', '400'),
'manufacturer_info' => array('products/info', 'right', '200'),
'order_history' => array('*', 'right', '300'),
'test_sellers' => array('*', 'left', '500'),
'product_notifications' => array('products/info', 'right', '500'),
'tell_a_friend' => array('products/info', 'right', '600'),
'specials' => array('*', 'content-top', '700'),
'reviews' => array('*', 'left', '800'),
'languages' => array('*', 'left', '900'),
'currencies' => array('*', 'left', '1000'),
'new_products' => array('index/category_listing', 'after', 400),
'new_products' => array('index/index', 'after', 400),
'upcoming_products' => array('index/index', 'after', 450),
'recently_visited' => array('*', 'after', 500),
'also_purchased_products' => array('products/info', 'after', 100));


This is a cool feature, the template installer can also define default box's location.

That's it for now.

WordPress 2.8.4: Security Release

WordPress 2.8.4: Security Release
Posted August 12, 2009 by Matt. Filed under Releases, Security.

Yesterday a vulnerability was discovered: a specially crafted URL could be requested that would allow an attacker to bypass a security check to verify a user requested a password reset. As a result, the first account without a key in the database (usually the admin account) would have its password reset and a new password would be emailed to the account owner. This doesn’t allow remote access, but it is very annoying.

We fixed this problem last night and have been testing the fixes and looking for other problems since then. Version 2.8.4 which fixes all known problems is now available for download and is highly recommended for all users of WordPress.

http://wordpress.org/development/2009/08/2-8-4-security-release/

Note: not really dangerous, I think.

Privacy Policy

Privacy Policy for hypermedialabs.blogspot.com

If you require any more information or have any questions about our privacy policy, please feel free to contact us by email at yusuf.fuad@gmail.com.

At hypermedialabs.blogspot.com, the privacy of our visitors is of extreme importance to us. This privacy policy document outlines the types of personal information is received and collected by hypermedialabs.blogspot.com and how it is used.

Log Files
Like many other Web sites, hypermedialabs.blogspot.com makes use of log files. The information inside the log files includes internet protocol ( IP ) addresses, type of browser, Internet Service Provider ( ISP ), date/time stamp, referring/exit pages, and number of clicks to analyze trends, administer the site, track user’s movement around the site, and gather demographic information. IP addresses, and other such information are not linked to any information that is personally identifiable.

Cookies and Web Beacons
hypermedialabs.blogspot.com does use cookies to store information about visitors preferences, record user-specific information on which pages the user access or visit, customize Web page content based on visitors browser type or other information that the visitor sends via their browser.

DoubleClick DART Cookie
.:: Google, as a third party vendor, uses cookies to serve ads on hypermedialabs.blogspot.com.
.:: Google's use of the DART cookie enables it to serve ads to users based on their visit to hypermedialabs.blogspot.com and other sites on the Internet.
.:: Users may opt out of the use of the DART cookie by visiting the Google ad and content network privacy policy at the following URL - http://www.google.com/privacy_ads.html

Some of our advertising partners may use cookies and web beacons on our site. Our advertising partners include ....
Google Adsense


These third-party ad servers or ad networks use technology to the advertisements and links that appear on hypermedialabs.blogspot.com send directly to your browsers. They automatically receive your IP address when this occurs. Other technologies ( such as cookies, JavaScript, or Web Beacons ) may also be used by the third-party ad networks to measure the effectiveness of their advertisements and / or to personalize the advertising content that you see.

hypermedialabs.blogspot.com has no access to or control over these cookies that are used by third-party advertisers.

You should consult the respective privacy policies of these third-party ad servers for more detailed information on their practices as well as for instructions about how to opt-out of certain practices. hypermedialabs.blogspot.com's privacy policy does not apply to, and we cannot control the activities of, such other advertisers or web sites.

If you wish to disable cookies, you may do so through your individual browser options. More detailed information about cookie management with specific web browsers can be found at the browsers' respective websites.

Monday, September 14, 2009

Install custom template

Now I install a free web 2.0 template which I downloaded from http://freeoscommerce.com/

But before that, I need to delete install directory and make configure.php not writable.

How to install? Just upload the files and activate the template from administration panel. A bug may occur here, but I have solved it.

Begin to try Oscommerce version 3

I am installing Oscommerce Version 3 Alpha 5 on osc3shop.joesoef.co.cc.

It will be hosted by freehostia, a free hosting and the domain name is provided by co.cc, a free domain name for a year.

It is quite simple. Just upload it and run the installer. However, the files is in a great number. After that, just access the site from web browser. The installer will ask you all the parameters required.

In 5-10 minutes the Oscommerce is ready. Now I have osc3shop.joesoef.co.cc ready to use. I will use it for learning to create custom template.

The next thing is to install additional template.

Sunday, September 13, 2009

Oscommerce version 3 bug

Found bug on Oscommerce version 3.0 alpha 5 :-(

applications/templates/templates.php

case 'save':
$this->_page_contents = 'edit.php';

if ( isset($_POST['subaction']) && ($_POST['subaction'] == 'confirm') ) {
$data = array('configuration' => $_POST['configuration']);

if ( $this->_save($_GET['template'], $data, ( isset($_POST['default']) && ( $_POST['default'] == 'on' ) ? true : false )) ) {
$osC_MessageStack->add($this->_module, $osC_Language->get('ms_success_action_performed'), 'success');
} else {
$osC_MessageStack->add($this->_module, $osC_Language->get('ms_error_action_not_performed'), 'error');
}


I just changed it (I hope this will be solved soon) to:


case 'save':
$this->_page_contents = 'edit.php';
// var_dump ($_POST);

$data='';
if ( isset($_POST['subaction']) && ($_POST['subaction'] == 'confirm') ) {
if (isset($_POST['configuration'])) {
$data = array('configuration' => $_POST['configuration']);
}


Bug is already listed in http://svn.oscommerce.com/jira/browse/OSC-142.
The error is this when i set to default any template:

Notice: Undefined index: configuration in .../oscommerce/admin/includes/content/templates.php on line 45