- # 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
- <IfModule !mod_rewrite.c>
- DirectoryIndex norewrite.html
- ErrorDocument 404 /norewrite.html
- </IfModule>
- # If PHP is not enabled, make default page point to warning
- <IfModule !mod_php5.c>
- DirectoryIndex nophp.html
- </IfModule>
- # Configure PHP
- <IfModule mod_php5.c>
- 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
- </IfModule>
- # Disable MultiViews as it interferes with rewrite
- # Disable directory listings for the potential security benefit
- Options -MultiViews -Indexes
- # Configure Rewrite Engine
- <IfModule mod_rewrite.c>
- RewriteEngine On
- <IfModule mod_php5.c>
- # 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
- <IfModule mod_info.c>
- RewriteRule ^server-info - [L]
- </IfModule>
- <IfModule mod_status.c>
- RewriteRule ^server-status - [L]
- </IfModule>
- # 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]
- </IfModule>
- <IfModule !mod_php5.c>
- # 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]
- </IfModule>
- </IfModule>
- # Configure Static Resource Cache Headers
- <IfModule mod_expires.c>
- 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.
- <FilesMatch \.php$>
- ExpiresActive Off
- </FilesMatch>
- </IfModule>
- # Enable apache based gzip'ing of text output
- <IfModule mod_deflate.c>
- AddOutputFilterByType DEFLATE text/html text/plain text/xml application/json
- </IfModule>
- # 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.
- <IfModule mod_cache.c>
- SetEnv no-cache
- </IfModule>
- # Headers for Compressed CSS/JS
- AddType text/css .cssgz
- AddType text/javascript .jsgz
- AddEncoding x-gzip .cssgz .jsgz