Skip to content

Instantly share code, notes, and snippets.

@puiutucutu
Forked from julkue/.htaccess
Created April 4, 2016 07:49
Show Gist options
  • Save puiutucutu/b3ae1efd485b04b2915f0bf276a41fb8 to your computer and use it in GitHub Desktop.
Save puiutucutu/b3ae1efd485b04b2915f0bf276a41fb8 to your computer and use it in GitHub Desktop.
Default .htaccess with configuration redirects to app.php
#/*!***************************************************
#* The MIT License (MIT)
#*
#* Copyright (c) 2014-2016, Julian Motz
#*
#* Permission is hereby granted, free of charge, to any person obtaining a copy
#* of this software and associated documentation files (the "Software"), to deal
#* in the Software without restriction, including without limitation the rights
#* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
#* copies of the Software, and to permit persons to whom the Software is
#* furnished to do so, subject to the following conditions:
#*
#* The above copyright notice and this permission notice shall be included in
#* all copies or substantial portions of the Software.
#*
#* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
#* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
#* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
#* THE SOFTWARE.
#*
#* Contributors:
#* Julian Motz - initial API and implementation
#* and initial documentation
#*****************************************************/
#--------------------------------
#-------------Global-------------
#--------------------------------
ServerSignature Off
# Use the front controller as index file. It serves as a fallback solution when
# every other rewrite/redirect fails (e.g. in an aliased environment without
# mod_rewrite). Additionally, this reduces the matching process for the
# start page (path "/") because otherwise Apache will apply the rewriting rules
# to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl).
DirectoryIndex app.php
# All pages in UTF-8
AddDefaultCharset UTF-8
# Set standard Timezone (will change dynamically)
php_value date.timezone "Europe/London"
# Deactivate MultiViews
# MultiViews would redirect to hello.php if you
# request /hello/
# Deactivate also directory browse
Options -Indexes +FollowSymLinks -MultiViews
# Define error-pages
ErrorDocument 401 /error/?m=401
ErrorDocument 403 /error/?m=403
ErrorDocument 500 /error/?m=500
ErrorDocument 502 /error/?m=502
ErrorDocument 504 /error/?m=504
# Force File download, do not display/open in browser
AddType application/octet-stream .pdf
AddType application/octet-stream .zip
AddType application/octet-stream .tar.gz
AddType application/octet-stream .7zip
AddType application/octet-stream .mov
AddType application/octet-stream .wmv
AddType application/octet-stream .mp4
# Set max upload filesize
php_value upload_max_filesize 100M
php_value post_max_size 100M
# Add security-layer for .htaccess-files
<files .htaccess="">
order allow,deny
deny from all
</files>
#--------------------------------
#------------/Global-------------
#--------------------------------
#--------------------------------
#------------Caching-------------
#--------------------------------
# gzip compresss
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>
# Expire headers
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 seconds"
ExpiresByType image/x-icon "access plus 2592000 seconds"
ExpiresByType image/jpeg "access plus 2592000 seconds"
ExpiresByType image/png "access plus 2592000 seconds"
ExpiresByType image/gif "access plus 2592000 seconds"
ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
ExpiresByType text/css "access plus 604800 seconds"
ExpiresByType text/javascript "access plus 432000 seconds"
ExpiresByType application/x-javascript "access plus 432000 seconds"
ExpiresByType text/html "access plus 600 seconds"
ExpiresByType application/xhtml+xml "access plus 600 seconds"
</IfModule>
# Cache-Control Headers
<IfModule mod_headers.c>
# Imagetoolbar deaktivieren (IE)
Header set imagetoolbar "no"
<FilesMatch "\\.(ico|jpe?g|png|gif|swf)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>
<FilesMatch "\\.(css)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
<FilesMatch "\\.(js)$">
Header set Cache-Control "max-age=432000, private"
</FilesMatch>
<FilesMatch "\\.(x?html?|php)$">
Header set Cache-Control "max-age=600, private, must-revalidate"
</FilesMatch>
</IfModule>
# Turn ETags Off
<IfModule mod_headers.c>
Header unset ETag
</IfModule>
FileETag None
# Remove Last-Modified Header
<IfModule mod_headers.c>
Header unset Last-Modified
</IfModule>
#--------------------------------
#-----------/Caching-------------
#--------------------------------
#--------------------------------
#------------Redirect------------
#--------------------------------
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Set variable to the current installation route
# so all redirects can perform with this
# if the .htaccess is installed in a sub-directory
# all redirects should also work!
# the variable will contain the current subdirectory
# of the htaccess
RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
#--------------------------------
#--------Common Redirects--------
#--------------------------------
# Redirect to domain with www but allow subdomains
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Add slash if there is no at the end
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]
# Remove double slashes in all URLs
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /(([^/\ ]+/)*)/+([^\ ]*)
RewriteRule ^ /%1%3 [L,R=301]
#--------------------------------
#------Simluate Directories------
#--------------------------------
# Redirect to URI without front controller to prevent duplicate content
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]
# If the requested filename exists, simply serve it.
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]
# Rewrite all other queries to the front controller.
RewriteRule .? %{ENV:BASE}/app.php [L]
</IfModule>
<IfModule !mod_rewrite.c>
<IfModule mod_alias.c>
# When mod_rewrite is not available, we instruct a temporary redirect of
# the start page to the front controller explicitly so that the website
# and the generated links can still be used.
RedirectMatch 302 ^/$ /app.php/
# RedirectTemp cannot be used instead
</IfModule>
</IfModule>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment