htaccess

htaccess and client sided routing

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /

  # forward everything to index.html, except existing files and folders
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^ index.html [L]
</IfModule>

URI redirect for RDF resolve

RewriteEngine On
RewriteBase /id/
RewriteCond %{REQUEST_URI} ^/id/(.+)$
RewriteRule ^(.+)$ https://data.netwerkdigitaalerfgoed.nl/hetutrechtsarchief/Test-Amerongen/browser?resource=https://hetutrechtsarchief.nl%{REQUEST_URI} [R=302,L]

404 handler

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.+\.jpg)$ HANDLER.php [L,QSA]
</IfModule>

redirect folder to other domain in root htaccess

RewriteRule ^FOLDER.*$ https://DOMAIN [R=301,L]

add www to your domain name when there isn't a subdomain

RewriteEngine On
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]

redirect all traffic to new domain

RewriteEngine On
RewriteRule ^(.*)$ https://newdomain.nl/ [R=301]

.htaccess: Invalid command 'ExpiresActive', perhaps misspelled or defined by a module not included in the server configuration

ln -s /etc/apache2/mods-available/expires.load /etc/apache2/mods-enabled/
# or
sudo a2enmod expires

Directory index

DirectoryIndex first.html

CORS

<Files "*.json">
Header add Access-Control-Allow-Origin "*"
</Files>

redirect to index.php in paged/ folder

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /paged/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /paged/index.php [L]
</IfModule>

then to extract /:page use:

preg_match('/^\/(.*)/',$_SERVER["REDIRECT_URL"], $matches, PREG_OFFSET_CAPTURE);
$page = explode("/",$matches[1][0])[1];

list files directoryIndex

Options +Indexes

force download

<FilesMatch "\.d3sketch$">
        ForceType application/octet-stream
        Header set Content-Disposition attachment
</FilesMatch>

(pre-compressed) gzip

AddEncoding gzip .gz

Access-Control-Allow-Origin * with X-Requested-With

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"

Basic Auth

AuthType Basic
AuthName "Restricted Files"
AuthUserFile /FOLDER/.htpasswd
<limit GET POST>
  require valid-user
</limit>

redirect

RewriteEngine On

##############################
# redirect /doku.php?id=xxx  #
###############################
RewriteCond %{QUERY_STRING} ^id=(.*)$
RewriteRule ^doku\.php$ http://wiki.companje.nl/%1? [R=302,L]
##############################

##############################
# redirect if file not found #
##############################
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ http://wiki\.companje\.nl/$1 [L,R=301]
#############################

Examples in Dutch

http://andrescholten.nl/voorbeelden-veel-gebruikte-htaccess-regels/

internal server error while using 'Header add'

enable Apache's headers module: sudo a2enmod headers && sudo service apache2 restart

Access-Control-Allow-Origin

http://enable-cors.org/server_apache.html or put this header in your php script:

header('Access-Control-Allow-Origin: *');  

show php errors

# don't supress php errors
php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on

disable cache

Header append Cache-Control "no-cache"

mod_rewrite cheat sheet

download as attachment

<FilesMatch "\.(mov|mp4)$">
  Header set Content-Disposition attachment
</FilesMatch>

create SHA encrypted password for htpasswd

htpasswd -s FOLDER/.htpasswd USERNAME

redirect subdomain to other url

RewriteCond %{HTTP_HOST} ^subdomain\.domain\.com
RewriteRule (.*) YOUR_URL [R=301,L]

with subfolder in query: (place this before the code above)

RewriteCond %{HTTP_HOST} ^(www\.)?subdomain\.domain\.com
RewriteCond %{REQUEST_URI} ^/lijst
Rewriterule ^(.*)$ http://otherdomain.com [L]

htaccess ignored?

set 'AllowOverride' to 'All' in httpd.conf within ...

examples in dutch

redirect to other domain with keeping folder

RewriteCond %{HTTP_HOST} =doodle3d.com
RewriteRule (.*) http://www.doodle3d.com/$1

redirect subdomain

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^kc\.doodle3d\.nl$ [NC]
RewriteRule (.*) http://kunstcentraal.doodle3d.nl [R]

serve .csv as text mime type

AddType text/plain .csv

Enable directory listing

Options +Indexes

Disable directory listing

Options -Indexes

Redirect if URL equals HTTP_HOST

RewriteRule ^$ /nl [R=301,L]

Unprotect a subdir of a htaccess password-protected directory

create a .htaccess in the subfolder with this in it:

Satisfy any

change max upload in PHP/ upload_max_filesize

edit your .htaccess:

php_value upload_max_filesize 20M
php_value post_max_size 20M
php_value max_execution_time 200
php_value max_input_time 200