# Swarm .htaccess file for Apache # For reference, consult this reference: # https://httpd.apache.org/docs/2.2/mod/quickreference.html # If the rewrite module is not enabled, make default and 404 page point to warning DirectoryIndex norewrite.html ErrorDocument 404 /norewrite.html # If PHP is not enabled, make default page point to warning DirectoryIndex nophp.html # Configure PHP DirectoryIndex index.php # For information on the meaning of these settings, please see: # http://www.php.net/manual/en/ini.list.php # These settings are required for Perforce Swarm php_value magic_quotes_gpc false php_value magic_quotes_runtime false php_value session.auto_start false # These settings govern how large file uploads can be # - The post_max_size value must be larger than upload_max_filesize # - The memory_limit value must be larger than post_max_size php_value upload_max_filesize 8M php_value post_max_size 16M # Disable MultiViews as it interferes with rewrite # Disable directory listings for the potential security benefit Options -MultiViews -Indexes # Configure Rewrite Engine RewriteEngine On # The queue/add action is handled by a lightweight script # so we handle routing it here via rewrite rules RewriteRule ^queue/add(/|/(.+)/?)?$ queue.php?token=$2 # Respect server-info or server-status if their modules are active RewriteRule ^server-info - [L] RewriteRule ^server-status - [L] # If its a request for a file that exists; just serve it RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l RewriteRule ^.*$ - [NC,L] # Drop numeric 'cache-buster' from minified css/js requests RewriteRule ^build/(.+)\-[0-9]+\.((css|js)(gz)?)$ build/$1.$2 [L] # Everything else gets handled by the app RewriteRule ^.*$ index.php [NC,L] # Without PHP, rewrite all non-docs and vendor material (JavaScript) to warning page RewriteCond %{REQUEST_URI} !^/docs/ RewriteCond %{REQUEST_URI} !^/vendor/ RewriteRule ^.*$ nophp.html [L] # Configure Static Resource Cache Headers ExpiresActive On ExpiresDefault "access plus 12 hours" # In order for the cache headers to apply to all static resources we # apply our 12 hour timeout to anything that isn't a php script. # The php scripts will quite possibly provide expiration headers on # their own but we didn't want them to have to fight this setting. ExpiresActive Off # Enable apache based gzip'ing of text output AddOutputFilterByType DEFLATE text/html text/plain text/xml application/json # By default apache ETags include the inode which makes them fail in # a horizontally scaled environment; we remove inode to fix this and # to make yslow a happier camper. FileETag MTime Size # Disable mod_cache as it serves out the wrong content for dynamic pages. # Our mod_rewrite rules direct all dynamic requests to index.php, which # is incompatible with mod_cache's lookups. SetEnv no-cache # Headers for Compressed CSS/JS AddType text/css .cssgz AddType text/javascript .jsgz AddEncoding x-gzip .cssgz .jsgz