This is my REBOL version of the php script from http://www.alistapart.com/articles/succeed/
.htaccess
RewriteEngine on
RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/home/index.r
index.r
#!/path/to/rebol -c
REBOL [Title: "The index takes it all"
File: %nicer-urls.r
Date: 17-sep-2012
Version: 0.1.0
Author: "Arnold van Hofwegen"
Purpose: { This is my REBOL version of the php script
from http://www.alistapart.com/articles/succeed/ }
library: [
level: 'intermediate
platform: 'all
type: [cgi demo]
domain: [cgi internet]
tested-under: none
support: none
license: none
see-also: "%nice-urls.r"
]
]
; Get some necessary information
docroot: get-env "DOCUMENT_ROOT"
requesteduri: get-env "REQUEST_URI"
scriptname: get-env "SCRIPT_FILENAME"
; Set some default values, fill in yours
defaultfile: "/rebol/index.html"
default404: "/errors/not_found.html"
init-html-page: does [
print "Content-type: text/html^/"
]
redirect-to: func [ redirect-url [ string! ] ] [
print ["Location: " redirect-url]
print "^m^j"
; and quit the script
quit
]
; 0. Perform some savety checks
if 100 < length? requesteduri [
; redirect to the sites 404 page and quit the script
redirect-to default404
]
; Return 404 when ../ attempted or /.scriptname
; or be kind and strip these and strip all double slashes too
replace/all requesteduri "/../" "/"
replace/all requesteduri "/." "/"
replace/all requesteduri "./" "/"
parse requesteduri [some [to "//" mark: (remove/part mark 2 mark: back insert mark "/") :mark ]]
; Strip html javascript tags
parse test [any [to "<" begin: thru ">" ending: (remove/part begin ending) :begin]]
; 1. check to see if a "real" file exists..
if all [exists? to-file rejoin [docroot requesteduri]
"/" <> requesteduri
scriptname <> rejoin [docroot requesteduri]] [
init-html-page
print read to-file rejoin [docroot requesteduri]
print ""
quit
]
; 2. if not, go ahead and check for dynamic content.
keywords: parse requesteduri "/"
remove/part keywords 1 ; First one is empty because requesteduri starts with "/"
if length? keywords [ ; request for the index
init-html-page
; now print read the default index file or construct the page
print read to-file rejoin [docroot defaultfile]
print ""
quit
]
; Look if anything in the Database matches the request
; This is an empty prototype. Insert your solution here.
check-database: func [keys [block!]] [
; connect to database and do a search for the entries in the table
do %/path/to/connectdb.r
open-db ; function from %connectdb.r
insert db "SELECT * from KEYWORDS_TABLE" ; example remember?
results: copy db
; either get content from a file or from the database itself
]
do-stuff: func [] [
; This is what it says it is
]
output-content: does [
init-html-page
print []
print ["Data"
]
print ["Document root: " docroot
]
print ["Requested uri: " requesteduri
]
print ["Script name : " scriptname
]
print []
print ""
]
if check-database keywords [
do-stuff
output-content
quit
]
; 3. nothing in DB either Error 404!
; redirect to the standard 404 page
redirect-to default404
; End of script
; quit is implicit