#!/usr/bin/env python """ Rewrite Script. Sean B. Palmer, inamidst.com Turns out to be equivalent to: $ cat .htaccess RewriteEngine on RewriteBase /uri RewriteRule ^([^/]+)\.([^\./]+)$ files/$2/$1.$2 RewriteCond %{DOCUMENT_ROOT}uri/files/$1 -d RewriteRule ^([^\./]+)$ $1/ [L,R] RewriteCond %{DOCUMENT_ROOT}uri/files/sans/$1 -f RewriteRule ^([^\./]+)$ files/sans/$1 [L] RewriteCond %{DOCUMENT_ROOT}uri/files/cgi/$1.cgi -f RewriteRule ^([^\./]+)$ files/cgi/$1.cgi [L] RewriteCond %{DOCUMENT_ROOT}uri/files/html/$1.html -f RewriteRule ^([^\./]+)$ files/html/$1.html [L] RewriteCond %{DOCUMENT_ROOT}uri/files/jpg/$1.jpg -f RewriteRule ^([^\./]+)$ files/jpg/$1.jpg [L] RewriteCond %{DOCUMENT_ROOT}uri/files/png/$1.png -f RewriteRule ^([^\./]+)$ files/png/$1.png [L] RewriteCond %{DOCUMENT_ROOT}uri/files/php/$1.php -f RewriteRule ^([^\./]+)$ files/php/$1.php [L] RewriteCond %{DOCUMENT_ROOT}uri/files/txt/$1.txt -f RewriteRule ^([^\./]+)$ files/txt/$1.txt [L] $ find -type f -exec ls -al {} \; | grep -v .svn -rw-r--r-- 1 sbp None 846 Apr 23 12:32 ./.htaccess -rw-r--r-- 1 sbp None 7 Apr 23 10:50 ./files/html/blargh.html -rw-r--r-- 1 sbp None 4 Apr 23 10:50 ./files/html/hmm.html -rw-r--r-- 1 sbp None 10 Apr 23 10:50 ./files/html/something.html -rw-r--r-- 1 sbp None 5 Apr 23 10:51 ./files/py/test.py -rw-r--r-- 1 sbp None 4 Apr 23 10:50 ./files/txt/heh.txt -rw-r--r-- 1 sbp None 4 Apr 23 10:50 ./files/txt/hmm.txt -rwxr-xr-x 1 sbp None 2095 Apr 23 14:57 ./rewrite.py """ import sys, os def main(): # This should be a path with no slashes... path = sys.stdin.read().rstrip('\n') filename = path.split('/').pop() if '.' in filename: basename, extension = filename.rsplit('.', 1) if os.path.isdir('files/' + extension): fn = 'files/' + extension + '/' + filename if os.path.isfile(fn): sys.stdout.write(fn + '\n') else: sys.stdout.write('NULL') else: sys.stdout.write('NULL') else: if os.path.isdir(filename): sys.stdout.write(filename + '/\n') elif os.path.isfile('files/sans/' + filename): sys.stdout.write('files/sans/' + filename + '\n') else: # @@ stripext stripable = frozenset(['cgi', 'html', 'jpg', 'png', 'php', 'txt']) for dirname in os.listdir('files'): if dirname in stripable: fn = 'files/' + dirname + '/' + filename + '.' + dirname if os.path.isfile(fn): sys.stdout.write(fn + '\n') break else: sys.stdout.write('NULL') if __name__=="__main__": main()