Skip to content

Instantly share code, notes, and snippets.

@mjau-mjau
Last active May 24, 2020 12:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mjau-mjau/48cc07c023626b3cd00cfd337e5ad986 to your computer and use it in GitHub Desktop.
Save mjau-mjau/48cc07c023626b3cd00cfd337e5ad986 to your computer and use it in GitHub Desktop.
X3 Default .htaccess file for Apache server
# ---------------------------------------------------------------------------
# X3 REQUIRED
# Below rewrite rules are strictly required by X3 for pages to work properly.
# Add custom rules inside "# custom rules start" and "# custom rules end" tags.
# ---------------------------------------------------------------------------
<IfModule mod_rewrite.c>
# RewriteEngine enabled
RewriteEngine on
# RewriteBase (required for some hosts)
# If X3 is installed in root: RewriteBase /
# If X3 is installed in sub-directory x3: RewriteBase /x3
# RewriteBase /
# Rewrite any calls to html|json|xml|atom|rss if a folder matching * exists
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.+)\.(html|json|xml|atom|rss)$ index.php?$1/ [L]
# Rewrite any calls to /render to the X3 image resizer
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{QUERY_STRING} ^(?)debug($|&)
RewriteCond %{REQUEST_URI} render/
RewriteRule ^render/. app/parsers/slir/index.php?$1 [L]
# Rewrite routes to X3 application index.php if they are non-existent files/dirs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ index.php?/$1/ [L,QSA]
</IfModule>
# ---------------------------------------------------------------------------
# OPTIONAL X3 APACHE SERVER CONFIG (if you have your own Apache server)
# https://gist.github.com/mjau-mjau/f4acd76bef4c1d33fba22913a9ff488e
# https://gist.github.com/mjau-mjau/b8fe3d3719bc400528945b194706e6f5
# ---------------------------------------------------------------------------
# X3 OPTIONAL
# Below rules are optional, but included by default for best practice.
# Many of the rules below should already be default from your Apache server.
# https://github.com/h5bp/server-configs-apache/blob/master/dist/.htaccess
# --------------------------------------------------------------------------
<IfModule mod_rewrite.c>
# Add a trailing slash to directories (/dir -> /dir/)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.|\?)
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ([^/]+)$ $1/ [L]
# Set HTTP_MOD_REWRITE flag for X3 diagnostics, used to detect mod_rewrite
<IfModule mod_env.c>
SetEnv HTTP_MOD_REWRITE On
</IfModule>
# Allow basic authentication in X3 for servers running PHP as FastCGI
RewriteCond %{HTTP:Authorization} !^$

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},E=PHP_AUTH_USER:%{HTTP:Authorization},E=REMOTE_USER:%{HTTP:Authorization},L]
</IfModule>
# CGIPassAuth On
# <IfModule mod_env.c>
# SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
# SetEnvIf Authorization .+ REMOTE_USER=$0
# </IfModule>
# Prevent X3 Diagnostics from showing server information
# <IfModule mod_env.c>
# SetEnv X3_HIDE_DIAGNOSTICS On
# </IfModule>
# Block directory listing.
# This should already be default on your server, and is disabled here because it creates errors on some servers.
# <IfModule mod_autoindex.c>
# Options -Indexes
# </IfModule>
# Serve resources labeled as text/html with media type charset set to UTF-8 (unicode).
AddDefaultCharset utf-8
# Serve resources with the proper media types (MIME types).
<IfModule mod_mime.c>
AddType application/json json
AddType application/javascript js
AddType image/svg+xml svg
AddType image/webp webp
AddType video/mp4 mp4
# Serve some extensions with media type charset set to UTF-8 (unicode).
AddCharset utf-8 .css .js .xml .json
</IfModule>
# Compress output (GZIP).
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE application/javascript \
application/json \
application/xml \
image/svg+xml \
text/css \
text/html \
text/xml
</IfModule>
# Remove ETags as resources are sent with far-future expires headers.
<IfModule mod_headers.c>
Header unset ETag
Header set X-Content-Type-Options nosniff
</IfModule>
FileETag None
# Agressive cache expires headers
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault "access plus 10 years"
ExpiresByType text/html "access plus 0 seconds"
ExpiresByType text/xml "access plus 3600 seconds"
ExpiresByType application/xml "access plus 3600 seconds"
</IfModule>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment