# :mode=htaccess:
#
# SimpleID
#
# Copyright (C) Kelvin Mo 2009
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the Free
# Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
# 
# $Id$

# Protect files and directories from prying eyes.
<FilesMatch "(\.(inc|cache|client|identity|xtpl|inc\.php|store\.php|extension\.php)|config\.php|locale)$">
    Order deny,allow
    Deny from all
</FilesMatch>

# Don't show directory listings for URLs which map to a directory.
Options -Indexes

# Various rewrite rules.
<IfModule mod_rewrite.c>
    RewriteEngine on

    # Modify the RewriteBase if you are using SimpleID in a subdirectory and
    # the rewrite rules are not working properly.
    #RewriteBase /simpleid

    # Pass Authorization header to PHP
    RewriteCond %{HTTP:Authorization} ^(.*)
    RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

    # Rewrite URLs
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>

# Switch register_globals to off
php_value register_globals 0
