This repository has been archived by the owner on Apr 18, 2019. It is now read-only.
forked from Kroc/CamenDesign
-
Notifications
You must be signed in to change notification settings - Fork 0
/
.htaccess
186 lines (147 loc) · 7.4 KB
/
.htaccess
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# ensure PHP5 is used
AddHandler php5-script .php
# enable the URL rewriting engine
RewriteEngine on
DirectorySlash off # personal preference
DirectoryIndex index.html index.cgi
# error messages:
ErrorDocument 404 /404
# Show maintenance page if it exists
ErrorDocument 503 /.system/maintenance.html
# do not mess with the subdomains
# (I’ve named them with folders starting with “_”)
RewriteRule ^_ - [L]
# this ‘feature’ (MultiViews) drove me absolutely insane!
# without this, Apache will give a 404 for a rewrite if a folder of the same
# name does not exist (e.g. “/blog/hello”)
# <webmasterworld.com/apache/3808792.htm>
Options -MultiViews +Indexes
# allow you guys to see this file
<Files .htaccess>
allow from all
</Files>
# force the latest IE version and use ChromeFrame if it's installed
# (from <github.com/paulirish/html5-boilerplate/blob/master/.htaccess>)
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
</IfModule>
</IfModule>
# no www. also, I don’t know why, but there seems to be incoming links using
# wap.*, m.* &c. for no reason (spambots?)
RewriteCond %{HTTP_HOST} ^(?:www?|wap|m|mobile|macmini|fake)\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
# additional filetypes
# ------------------------------------------------------------------------------
AddType video/ogg .ogv
AddType audio/ogg .oga .ogg
AddType video/mp4 .mp4
AddType video/webm .webm
AddType font/ttf .ttf
AddType font/otf .otf
AddType font/x-woff .woff
AddType image/svg+xml .svg .svgz
AddEncoding gzip .svgz
AddType application/rss+xml .rss
AddType text/remarkable .rem
AddType text/plain .do # “to.do” files
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css application/x-javascript text/javascript application/javascript application/json text/xml application/xml application/rss+xml
<FilesMatch "\.(ttf|otf|svg)$">
SetOutputFilter DEFLATE
</FilesMatch>
</IfModule>
# force utf-8 for a number of file formats:
AddDefaultCharset utf-8
AddCharset utf-8 .rem .html .css .rss .xml .js .txt .do
# caching
# ------------------------------------------------------------------------------
FileETag MTime Size
<IfModule mod_expires.c>
Header set cache-control: public
ExpiresActive on
ExpiresDefault "access plus 1 month"
ExpiresByType text/html "access plus 1 hour"
ExpiresByType application/rss+xml "access plus 1 hour"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType video/ogg "access plus 1 month"
ExpiresByType audio/ogg "access plus 1 month"
ExpiresByType video/mp4 "access plus 1 month"
ExpiresByType video/webm "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresByType font/ttf "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
</IfModule>
# prevent 3G carriers and proxies from breaking my code with their incompetent
# compression methods
# (this currently 500s and stuff needs to be modified for the /design/ rewrite)
# <Files ~ "\.(cs[sz]|rs[sz]|html5)$">
# Header merge Cache-Control no-transform
# </Files>
# to seperate content / code webroot is pure content, and the site’s code /
# design is all within ‘/.system/’
RewriteRule ^robots.txt$ /.system/robots.txt [NC,L]
RewriteRule ^favicon.ico$ /.system/design/img/favicon.ico [NC,L]
RewriteRule ^apple-touch-icon.png$ /.system/design/img/icon-apple-touch.png [L]
RewriteRule ^sitemap.xml$ /.system/sitemap.xml [L]
# ==============================================================================
RewriteCond %{REQUEST_URI} ^/design/?$
RewriteRule ^design/$ /.system/design/design.css [L]
RewriteRule ^design/(.*)$ /.system/design/$1 [L]
# give the compressed RSS file for the given directory
# if the file exists in the cache use that, if not, pass to the PHP to generate
RewriteCond %{REQUEST_URI} ^/([a-z0-9-]+/)?rss$
RewriteCond %{DOCUMENT_ROOT}/.cache/%1feed.rss -F
RewriteRule ^([a-z0-9-]+/)?rss$ /.cache/$1feed.rss [L]
RewriteRule ^(?:([a-z0-9-]+)/)?rss$ /.system/rss.php?category=$1 [L]
# view-source
# ------------------------------------------------------------------------------
# you can view the source of all the PHP files on the site due to the
# distinction that no PHP files are called directly by name in the site, instead
# all PHP is executed via some kind of RewriteRule. therefore we make it that
# any direct visit to a PHP file shows in plain text, but rewrites execute the
# PHP instead
RewriteCond %{THE_REQUEST} \.(htaccess|php|rem|sh)(\?.*)?\ HTTP
RewriteRule ^.*(?<!view-source\.php)$ /.system/view-source.php?file=$0 [L]
# article content
# ------------------------------------------------------------------------------
# requesting a tag page (e.g. “/blog/”) - show the latest article
# rewrite to “…/latest”, which will be checked against cache below, and
# processed accrodingly by article.php
RewriteRule ^([a-z0-9-]+/)?$ /$1latest [PT]
# article editing
# ------------------------------------------------------------------------------
#RewriteRule ^((?:[a-z0-9-]+/)?[a-z0-9_-]+):edit$ /.system/edit.php?article=$1.rem [L]
# requesting an article? (e.g. “/blog/hello”)
# if the file is not in the cache (or we are viewing the HTML), run it through
# the PHP to generate the article
RewriteCond %{REQUEST_URI} ^(/(?:[a-z0-9-]+/)?[a-z0-9_-]+)(\.html)?$
RewriteCond %{THE_REQUEST} \b.*?\.html\b [OR]
RewriteCond %{DOCUMENT_ROOT}/.cache%1.html !-F
RewriteRule ^((?:[a-z0-9-]+/)?[a-z0-9_-]+)(\.html)?$ /.system/article.php?article=$1.rem [L]
# …otherwise load the cache
RewriteRule ^((?:[a-z0-9-]+/)?[a-z0-9_-]+)(\.html)?$ /.cache/$1.html [L]
# directory browsing (under construction)
# ------------------------------------------------------------------------------
RewriteRule ^(?:(\.(?!\.)|[^.])+\/)*$ /.system/dir.php?path=$0 [L]
# stop hotlinking
# ------------------------------------------------------------------------------
# outright block access to the following files
# need to optimise this with env variables or something to reduce repetition
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(fever\..*|([a-z0-9]+\.)?(kogitoapp|marenkay)((\.[a-z]+){1,2})?|.*/fever)/ [NC]
RewriteRule \.(swf|og[agv]|mp4|m4v|ttf|ttz|svg|svz)$ - [F,L]
# don’t get stuck in a loop
RewriteRule ^\.cache/ - [L]
# allowed domains
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(stage\..*|([a-z0-9]+\.)?(kogitoapp|marenkay)((\.[a-z]+){1,2})?|.*/fever)/ [NC]
RewriteCond %{REQUEST_URI} ^.*(?<!_preview)\.(jpe?g|png)$
RewriteCond %{DOCUMENT_ROOT}/.cache%0 -F
RewriteRule ^.*(?<!_preview)\.(jpe?g|png)$ /.cache/$0 [L]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(stage\..*|([a-z0-9]+\.)?(kogitoapp|marenkay)((\.[a-z]+){1,2})?|.*/fever)/ [NC]
RewriteRule ^.*(?<!_preview)\.(jpe?g|png)$ /.system/hotlink.php?image=$0 [L]