Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(1136)

Side by Side Diff: joomla-master-htaccess.txt

Issue 4290071: Joomla master .htaccess - differences 2.4.1 - 3.0.a / 2.4.3 - 3.0.a Base URL: http://joomla-master-htaccess.googlecode.com/svn/trunk/
Patch Set: Created 3 years ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 ############################################################################### 1 ###############################################################################
2 ## The Master .htaccess 2 ## The Master .htaccess
3 ## 3 ##
4 ## Version 2.4 (proposed) - March 24th, 2011 4 ## Version 3 - March 28th, 2010
5 ## 5 ##
6 ## ---------- 6 ## ----------
7 ## This file is designed to be the template .htaccess file to put on your new 7 ## This file is designed to be the template .htaccess file to put on your new
8 ## sites, increasing your site's security and performance. It is not meant to 8 ## sites, increasing your site's security and performance. It is not meant to
9 ## be just dropped in your site, though. You should go through all of its 9 ## be just dropped in your site, though. You should go through all of its
10 ## sections and modify it to match your site. Most notably, all instances of 10 ## sections and modify it to match your site. Most notably, all instances of
11 ## example.com and example\.com should be replaced with your real domain name. 11 ## domain.com and domain\.com should be replaced with your real domain name.
g1smd 2011/04/02 00:13:10 example.com and example\.com
12 ## 12 ##
13 ## Some sections are too picky and may cause problems with legitimate requests. 13 ## Some sections are too picky and may cause problems with legitimate requests.
14 ## You are ultimately responsible for disabling them or writing exception rules 14 ## You are ultimately responsible for disabling them or writing exception rules
15 ## for your requests. Most notably, the advanced server protection section will 15 ## for your requests. Most notably, the advanced server protection section will
16 ## cause issues with several minifiers, eXtplorer, VirtueMart and other exten- 16 ## cause issues with several minifiers, eXtplorer, VirtueMart and other exten-
17 ## sions which use non-standard scripts as their entry points. You must add 17 ## sions which use non-standard scripts as their entry points. You must add
18 ## exceptions for them manually. 18 ## exceptions for them manually.
19 ## 19 ##
20 ## Some sections - depending on your server configuration - may cause your site 20 ## Some sections - depending on your server configuration - may cause your site
21 ## to throw 500 Internal Server Error. The only way to figure out which one is 21 ## to throw 500 Internal Server Error. The only way to figure out which one is
22 ## causing it is trial and error. 22 ## causing it is trial and error.
23 ## 23 ##
24 ## Big thank you's to Brian Teeman, Ken Crowder, Radek Suski and Fotis 24 ## Big thank you's to Brian Teeman, Ken Crowder, Radek Suski and Fotis
25 ## Evangelou for sharing their .htaccess rules with the world and inspiring 25 ## Evangelou for sharing their .htaccess rules with the world and inspiring
26 ## the creation of this file. Special thanks to Jon Brown for sharing his 26 ## the creation of this file. Special thanks to Jon Brown for sharing his
27 ## research and helping me improve this file. 27 ## research and helping me improve this file.
28 ## 28 ##
29 ## Additional thank-yous to John for his remarks and g1smd for taking the
30 ## time to optimize the speed of the file.
31 ##
32 ## It is usually prudent to remove the comments from the file when using it
33 ## on a live host to minimize the parsing time.
34 ##
29 ## ---------------------------------------------------------------------- 35 ## ----------------------------------------------------------------------
30 ## Do you want to customize this .htaccess file with a few clicks? 36 ## Do you want to customize this .htaccess file with a few clicks?
31 ## Admin Tools Professional by AkeebaBackup.com does this and much more. 37 ## Admin Tools Professional by AkeebaBackup.com does this and much more.
32 ## 38 ##
33 ## Learn more: http://www.akeebabackup.com/software/admin-tools.html 39 ## Learn more: http://www.akeebabackup.com/software/admin-tools.html
34 ## ---------------------------------------------------------------------- 40 ## ----------------------------------------------------------------------
35 ## 41 ##
36 ## Have fun, stay safe. 42 ## Have fun, stay safe.
37 ## 43 ##
38 ## Nicholas K. Dionysopoulos 44 ## Nicholas K. Dionysopoulos
39 ## Lead Developer, AkeebaBackup.com 45 ## Lead Developer, AkeebaBackup.com
40 ## 46 ##
41 ## CHANGELOG: 47 ## CHANGELOG:
42 ## Version 2.4 (proposed) (March 24th, 2011) 48 ## Version 3.0 (March 28th, 2011)
43 ## - Dozens of speed optimisations and many logic and syntax corrections. 49 ## - Massive rewrite
44 ## Version 2.3 (November 18th, 2010) 50 ## Version 2.3 (November 18th, 2010)
45 ## - Added .ico to the pass-through rules, for favicons to load 51 ## - Added .ico to the pass-through rules, for favicons to load
46 ## Version 2.2 (October 25th, 2010) 52 ## Version 2.2 (October 25th, 2010)
47 ## - Bug in the tmpl=component rule 53 ## - Bug in the tmpl=component rule
48 ## Version 2.1 (October 19th, 2010) 54 ## Version 2.1 (October 19th, 2010)
49 ## - index.php to root redirection would kill some AJAX requests 55 ## - index.php to root redirection would kill some AJAX requests
50 ## - Referer filtering was screwed up 56 ## - Referer filtering was screwed up
51 ## - Simplified and more thorough PHP Easter Egg code (thanks Jon!) 57 ## - Simplified and more thorough PHP Easter Egg code (thanks Jon!)
52 ## - The tp/template/tmpl filter was not thorough and killed some components 58 ## - The tp/template/tmpl filter was not thorough and killed some components
53 ## - Optimized Joomla! core SEF section 59 ## - Optimized Joomla! core SEF section
54 ## - Bot filters and GZip optimization would never run for dynamic content 60 ## - Bot filters and GZip optimization would never run for dynamic content
55 ## - Content expiration optimization got more optimized 61 ## - Content expiration optimization got more optimized
56 ## - Added ETag rule 62 ## - Added ETag rule
57 ## 63 ##
58 ############################################################################### 64 ###############################################################################
59 65
60 ########## Begin - RewriteEngine enabled 66 ########## Begin - RewriteEngine enabled
61 RewriteEngine On 67 RewriteEngine On
g1smd 2011/03/28 21:54:47 I didn't notice that "Options" was already further
62 Options +FollowSymLinks
63 ########## End - RewriteEngine enabled 68 ########## End - RewriteEngine enabled
64 69
65 ########## Begin - RewriteBase 70 ########## Begin - RewriteBase
66 # Uncomment following line if your webserver's URL 71 # Uncomment following line if your webserver's URL
67 # is not directly related to physical file paths. 72 # is not directly related to physical file paths.
68 # Update Your Joomla! Directory (just / for root) 73 # Update Your Joomla! Directory (just / for root)
69 74
70 # RewriteBase / 75 # RewriteBase /
71 ########## End - RewriteBase 76 ########## End - RewriteBase
72 77
73 ########## Begin - File execution order, by Komra.de
74 DirectoryIndex index.php index.html
75 ########## End - File execution order
76
77 ########## Begin - No directory listings 78 ########## Begin - No directory listings
78 ## Note: +FollowSymlinks may cause problems and you might have to remove it 79 ## Note: +FollowSymlinks may cause problems and you might have to remove it
79 IndexIgnore * 80 IndexIgnore *
80 Options +FollowSymLinks All -Indexes 81 Options +FollowSymLinks All -Indexes
81 ########## End - No directory listings 82 ########## End - No directory listings
82 83
84 ########## Begin - File exection order, by Komra.de
g1smd 2011/04/03 08:53:23 Spelling.
85 DirectoryIndex index.php index.html
86 ########## End - File exection order
g1smd 2011/04/03 08:53:23 Spelling.
87
83 ########## Begin - ETag Optimization 88 ########## Begin - ETag Optimization
84 ## This rule will create an ETag for files based only on the modification 89 ## This rule will create an ETag for files based only on the modification
85 ## timestamp and their size. This works wonders if you are using rsync'ed 90 ## timestamp and their size. This works wonders if you are using rsync'ed
86 ## servers, where the inode number of identical files differs. 91 ## servers, where the inode number of identical files differs.
87 ## Note: It may cause problems on your server and you may need to remove it 92 ## Note: It may cause problems on your server and you may need to remove it
88 FileETag MTime Size 93 FileETag MTime Size
89 ########## End - ETag Optimization 94 ########## End - ETag Optimization
90 95
91 ########## Begin - Optimal default expiration time 96 ########## Begin - Optimal default expiration time
92 ## Note: this might cause problems and you might have to comment it out by 97 ## Note: this might cause problems and you might have to comment it out by
93 ## placing a hash in front of this section's lines 98 ## placing a hash in front of this section's lines
99 ## Note: Some people prefer using "now plus 1 month" instead of "now plus 1 year ".
g1smd 2011/03/28 21:54:47 http://www.webmasterworld.com/apache/4118917.htm#m
100 ## Suit to taste.
94 <IfModule mod_expires.c> 101 <IfModule mod_expires.c>
95 # Enable expiration control 102 # Enable expiration control
96 ExpiresActive On 103 ExpiresActive On
97 104
98 # Default expiration: 1 hour after request 105 # Default expiration: 1 hour after request
99 ExpiresDefault "now plus 1 hour" 106 ExpiresDefault "now plus 1 hour"
100 107 »
101 # CSS and JS expiration: 1 week after request 108 # CSS and JS expiration: 1 week after request
102 ExpiresByType text/css "now plus 1 week" 109 ExpiresByType text/css "now plus 1 week"
103 ExpiresByType application/javascript "now plus 1 week" 110 ExpiresByType application/javascript "now plus 1 week"
104 ExpiresByType application/x-javascript "now plus 1 week" 111 ExpiresByType application/x-javascript "now plus 1 week"
105 112 »
106 » # Image files expiration: 1 month after request 113 » # Image files expiration: 1 year after request
107 » ExpiresByType image/bmp "now plus 1 month" 114 » ExpiresByType image/bmp "now plus 1 year"
108 » ExpiresByType image/gif "now plus 1 month" 115 » ExpiresByType image/gif "now plus 1 year"
109 » ExpiresByType image/jpeg "now plus 1 month" 116 » ExpiresByType image/jpeg "now plus 1 year"
110 » ExpiresByType image/jp2 "now plus 1 month" 117 » ExpiresByType image/jp2 "now plus 1 year"
111 » ExpiresByType image/pipeg "now plus 1 month" 118 » ExpiresByType image/pipeg "now plus 1 year"
112 » ExpiresByType image/png "now plus 1 month" 119 » ExpiresByType image/png "now plus 1 year"
113 » ExpiresByType image/svg+xml "now plus 1 month" 120 » ExpiresByType image/svg+xml "now plus 1 year"
114 » ExpiresByType image/tiff "now plus 1 month" 121 » ExpiresByType image/tiff "now plus 1 year"
115 » ExpiresByType image/vnd.microsoft.icon "now plus 1 month" 122 » ExpiresByType image/vnd.microsoft.icon "now plus 1 year"
116 » ExpiresByType image/x-icon "now plus 1 month" 123 » ExpiresByType image/x-icon "now plus 1 year"
117 » ExpiresByType image/ico "now plus 1 month" 124 » ExpiresByType image/ico "now plus 1 year"
118 » ExpiresByType image/icon "now plus 1 month" 125 » ExpiresByType image/icon "now plus 1 year"
119 » ExpiresByType text/ico "now plus 1 month" 126 » ExpiresByType text/ico "now plus 1 year"
120 » ExpiresByType application/ico "now plus 1 month" 127 » ExpiresByType application/ico "now plus 1 year"
121 » ExpiresByType image/vnd.wap.wbmp "now plus 1 month" 128 » ExpiresByType image/vnd.wap.wbmp "now plus 1 year"
122 » ExpiresByType application/vnd.wap.wbxml "now plus 1 month" 129 » ExpiresByType application/vnd.wap.wbxml "now plus 1 year"
123 » ExpiresByType application/smil "now plus 1 month" 130 » ExpiresByType application/smil "now plus 1 year"
124 131 »
125 » # Audio files expiration: 1 month after request 132 » # Audio files expiration: 1 year after request
126 » ExpiresByType audio/basic "now plus 1 month" 133 » ExpiresByType audio/basic "now plus 1 year"
127 » ExpiresByType audio/mid "now plus 1 month" 134 » ExpiresByType audio/mid "now plus 1 year"
128 » ExpiresByType audio/midi "now plus 1 month" 135 » ExpiresByType audio/midi "now plus 1 year"
129 » ExpiresByType audio/mpeg "now plus 1 month" 136 » ExpiresByType audio/mpeg "now plus 1 year"
130 » ExpiresByType audio/x-aiff "now plus 1 month" 137 » ExpiresByType audio/x-aiff "now plus 1 year"
131 » ExpiresByType audio/x-mpegurl "now plus 1 month" 138 » ExpiresByType audio/x-mpegurl "now plus 1 year"
132 » ExpiresByType audio/x-pn-realaudio "now plus 1 month" 139 » ExpiresByType audio/x-pn-realaudio "now plus 1 year"
133 » ExpiresByType audio/x-wav "now plus 1 month" 140 » ExpiresByType audio/x-wav "now plus 1 year"
134 141 »
135 » # Movie files expiration: 1 month after request 142 » # Movie files expiration: 1 year after request
136 » ExpiresByType application/x-shockwave-flash "now plus 1 month" 143 » ExpiresByType application/x-shockwave-flash "now plus 1 year"
137 » ExpiresByType x-world/x-vrml "now plus 1 month" 144 » ExpiresByType x-world/x-vrml "now plus 1 year"
138 » ExpiresByType video/x-msvideo "now plus 1 month" 145 » ExpiresByType video/x-msvideo "now plus 1 year"
139 » ExpiresByType video/mpeg "now plus 1 month" 146 » ExpiresByType video/mpeg "now plus 1 year"
140 » ExpiresByType video/mp4 "now plus 1 month" 147 » ExpiresByType video/mp4 "now plus 1 year"
141 » ExpiresByType video/quicktime "now plus 1 month" 148 » ExpiresByType video/quicktime "now plus 1 year"
142 » ExpiresByType video/x-la-asf "now plus 1 month" 149 » ExpiresByType video/x-la-asf "now plus 1 year"
143 » ExpiresByType video/x-ms-asf "now plus 1 month" 150 » ExpiresByType video/x-ms-asf "now plus 1 year"
144 </IfModule> 151 </IfModule>
145 ########## End - Optimal expiration time 152 ########## End - Optimal expiration time
146 153
147 ########## Begin - Common hacking tools and bandwidth hoggers block 154 ########## Begin - Common hacking tools and bandwidth hoggers block
148 ## By SigSiu.net and @nikosdion. 155 ## By SigSiu.net and @nikosdion.
149 ## WARNING: This will also block old versions of JoomlaPack Remote 156 # This line also disables Akeeba Remote Control 2.5 and earlier
150 ## and will disallow running CRON jobs using wget.
151 # The following rules are for common hacking tools:
152 SetEnvIf user-agent "Indy Library" stayout=1 157 SetEnvIf user-agent "Indy Library" stayout=1
153 SetEnvIf user-agent "libwww-perl" stayout=1 158 # WARNING: Disabling wget will also block the most common method for
159 # running CRON jobs. Remove if you have issues with CRON jobs.
154 SetEnvIf user-agent "Wget" stayout=1 160 SetEnvIf user-agent "Wget" stayout=1
155 # The following rules are for bandwidth-hogging download tools 161 # The following rules are for bandwidth-hogging download tools
162 SetEnvIf user-agent "libwww-perl" stayout=1
156 SetEnvIf user-agent "Download Demon" stayout=1 163 SetEnvIf user-agent "Download Demon" stayout=1
157 SetEnvIf user-agent "GetRight" stayout=1 164 SetEnvIf user-agent "GetRight" stayout=1
158 SetEnvIf user-agent "GetWeb!" stayout=1 165 SetEnvIf user-agent "GetWeb!" stayout=1
159 SetEnvIf user-agent "Go!Zilla" stayout=1 166 SetEnvIf user-agent "Go!Zilla" stayout=1
160 SetEnvIf user-agent "Go-Ahead-Got-It" stayout=1 167 SetEnvIf user-agent "Go-Ahead-Got-It" stayout=1
161 SetEnvIf user-agent "GrabNet" stayout=1 168 SetEnvIf user-agent "GrabNet" stayout=1
162 SetEnvIf user-agent "TurnitinBot" stayout=1 169 SetEnvIf user-agent "TurnitinBot" stayout=1
163 # This line denies access to all of the above tools 170 # This line denies access to all of the above tools
164 deny from env=stayout 171 deny from env=stayout
165 ########## End - Common hacking tools and bandwidth higgers block 172 ########## End - Common hacking tools and bandwidth higgers block
166 173
167 ########## Begin - Automatic compression of resources 174 ########## Begin - Automatic compression of resources
168 # Compress text, html, javascript, css, xml, kudos to Komra.de 175 # Compress text, html, javascript, css, xml, kudos to Komra.de
169 # May kill access to your site for old versions of Internet Explorer 176 # May kill access to your site for old versions of Internet Explorer
170 # The server needs to be compiled with mod_deflate otherwise it will send HTTP 5 00 Error. 177 # The server needs to be compiled with mod_deflate otherwise it will send HTTP 5 00 Error.
171 # mod_deflate is not available on Apache 1.x series. Can only be used with Apach e 2.x server. 178 # mod_deflate is not available on Apache 1.x series. Can only be used with Apach e 2.x server.
172 # AddOutputFilterByType is now deprecated by Apache. Use mod_filter in the futur e. 179 # AddOutputFilterByType is now deprecated by Apache. Use mod_filter in the futur e.
173 AddOutputFilterByType DEFLATE text/plain text/html text/xml text/css application /xml application/xhtml+xml application/rss+xml application/javascript applicatio n/x-javascript 180 AddOutputFilterByType DEFLATE text/plain text/html text/xml text/css application /xml application/xhtml+xml application/rss+xml application/javascript applicatio n/x-javascript
174 ########## End - Automatic compression of resources 181 ########## End - Automatic compression of resources
175 182
176 ########## Begin - Google Apps redirection, by Komra.de 183 ########## Begin - Google Apps redirection, by Komra.de
177 RewriteRule ^mail http://mail.google.com/a/example.com [R=301,L] 184 Redirect 301 /mail http://mail.google.com/a/domain.com
g1smd 2011/03/28 21:54:47 Don't mix Redirect and RewriteRule in the same sit
185 # If the above doesn't work on your server, try this:
186 # RewriteRule ^mail http://mail.google.com/a/domain.com [R=301,L]
178 ########## End - Google Apps redirection 187 ########## End - Google Apps redirection
179 188
180 ########## Begin - Redirect index.html~htm to / for root and /path/ for folders 189 ########## Begin - Redirect index.php to /
181 ## Note: Change example.com to reflect your own domain name 190 ## Note: Change domain.com to reflect your own domain
182 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index\.html?\ HTTP/
183 RewriteRule ^(([^/]+/)*)index\.html?$ http://www.example.com/$1 [R=301,L]
184 ########## End - Redirect index.html~htm to / for root and /path/ for folders
185
186 ########## Begin - Redirect index.php to / for root and /path/ for folders
187 ## Note: Change example.com to reflect your own domain name
188 RewriteCond %{THE_REQUEST} !^POST 191 RewriteCond %{THE_REQUEST} !^POST
189 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index\.php\ HTTP/ 192 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
190 RewriteCond %{SERVER_PORT}>s ^(443>(s)|[0-9]+>s)$ 193 RewriteCond %{SERVER_PORT}>s ^(443>(s)|[0-9]+>s)$
191 RewriteRule ^(([^/]+/)*)index\.php$ http%2://www.example.com/$1 [R=301,L] 194 RewriteRule ^index\.php$ http%2://www.domain.com/ [R=301,L]
192 ########## End - Redirect index.php to / for root and /path/ for folders 195 # If the above line throws a 500 error, try this instead:
196 # RewriteRule ^index\.php$ http%2://www.domain.com/ [R,L]
g1smd 2011/03/28 21:54:47 Simpler note: "If the above line throws a 500 erro
197 ########## End - Redirect index.php to /
193 198
194 ########## Begin - Redirect non-www to www 199 ########## Begin - Redirect non-www to www
195 ## Note: Change www.example.com to reflect your own domain name 200 RewriteCond %{HTTP_HOST} !^www\. [NC]
196 RewriteCond %{HTTP_HOST} !^(www\.example\.com)?$ 201 RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R,L]
g1smd 2011/03/28 21:54:47 [R=301,L]
g1smd 2011/03/28 21:54:47 ^ and $ not required.
197 RewriteRule (.*) http://www.example.com/$1 [R=301,L]
198 ########## End - Redirect non-www to www 202 ########## End - Redirect non-www to www
199 203
200 ########## Begin - Redirect www to non-www 204 ########## Begin - Redirect www to non-www
201 ## WARNING: Comment out the non-www to www rule if you choose to use this 205 ## WARNING: Comment out the non-www to www rule if you choose to use this
202 #RewriteCond %{HTTP_HOST} !^(example\.com)?$ 206 #RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
203 #RewriteRule (.*) http://example.com/$1 [R=301,L] 207 #RewriteRule ^(.*)$ http://%1/$1 [R,L]
g1smd 2011/03/28 21:54:47 [R=301,L]
g1smd 2011/03/28 21:54:47 ^ and $ not required.
204 ########## End - Redirect non-www to www 208 ########## End - Redirect non-www to www
205 209
206 ########## Begin - Redirect (www.)olddomain.com to www.example.com 210 ########## Begin - Redirect (www.)olddomain.com to www.domain.com
207 ## Note: olddomain.com is your old domain name, you want to redirect FROM, 211 ## Note: olddomain.com is your old domain name, you want to redirect FROM,
208 ## whereas www.example.com is the new domain name you want to redirect TO. 212 ## whereas www.domain.com is the new domain name you want to redirect TO.
209 ## Change those names to reflect your current configuration. Remember, this 213 ## Change those names to reflect your current configuration. Remember, this
210 ## small part of the file is supposed to be placed in olddomain.com! 214 ## file is supposed to be placed in www.domain.com!
g1smd 2011/03/28 21:54:47 If the file is placed in www.domain.com then it wi
211 RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com [NC] 215 ## Note: Replace [L=301,R] with [L,R] if you get error 500.
g1smd 2011/03/28 21:54:47 Correction: "Note: Replace [R=301,L] with [R,L] i
212 RewriteRule ^(([^/]+/)*)index\.(php|html?) http://www.example.com/$1 [R=301,L] 216 RewriteCond %{HTTP_HOST} ^(www\.)?olddomain.com [NC]
g1smd 2011/03/28 21:54:47 Escape literal periods.
213 RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com [NC] 217 RewriteRule ^index\.php$ http://www.domain.com/ [L=301,R]
g1smd 2011/03/28 21:54:47 [L=301,R] should be [R=301,L]
214 RewriteRule (.*) http://www.example.com/$1 [R=301,L] 218 RewriteCond %{HTTP_HOST} ^(www\.)?olddomain.com [NC]
g1smd 2011/03/28 21:54:47 Escape literal periods.
215 ## Note: The above section is only required if you are changing your domain name . 219 RewriteRule ^(.*)$ http://www.domain.com/$1 [L=301,R]
g1smd 2011/03/28 21:54:47 [L=301,R] should be [R=301,L]
g1smd 2011/03/28 21:54:47 ^ and $ not required.
216 ########## End - Redirect (www.)olddomain.com to www.example.com 220 ########## End - Redirect olddomain.com to www.domain.com
217 221
218 ########## Begin - Force HTTPS for certain pages 222 ########## Begin - Force HTTPS for certain pages
219 # Force the page foobar.html to run in HTTPS mode, no matter what Joomla! says. 223 # Force the page foobar.html to run in HTTPS mode, no matter what Joomla! says.
220 # This line is required for this rule to work properly 224 # This line is required for this rule to work properly
221 RewriteCond %{SERVER_PORT} !^443$ 225 RewriteCond %{HTTPS} ^off$ [NC]
222 # This is a sample redirection for foobar.html. Do note that you have to change 226 # This is a sample redirection for foobar.html. Do note that you have to change
223 # www.example.com to reflect your own domain. Remember to escape the dots using 227 # www.domain.com to reflect your own domain. Remember to escape the dots using
224 # \. in the left hand side of each rule. 228 # \. in the left hand side of each rule.
225 RewriteRule ^foobar\.html$ https://www.example.com/foobar.html [R=301,L] 229 RewriteRule ^foobar\.html$ https://www.domain.com/foobar.html [L,R]
g1smd 2011/03/28 21:54:47 [R=301,L]
226 # Add more rules below this line as required 230 # Add mode rules below this line
g1smd 2011/03/28 21:54:47 mode -> more
227 ########## End - Force HTTPS for certain pages 231 ########## End - Force HTTPS for certain pages
228 232
229 ########## Begin - Rewrite rules to block out some common exploits 233 ########## Begin - Rewrite rules to block out some common exploits
230 ## If you experience problems on your site block out the operations listed below 234 ## If you experience problems on your site block out the operations listed below
231 ## This attempts to block the most common type of exploit `attempts` to Joomla! 235 ## This attempts to block the most common type of exploit `attempts` to Joomla!
232 # 236 #
233 # If the request query string contains /proc/self/environ (by SigSiu.net) 237 # If the request contains /proc/self/environ (by SigSiu.net)
g1smd 2011/03/28 21:54:47 Clarification: If the request _query string_ cont
234 RewriteCond %{QUERY_STRING} proc/self/environ [OR] 238 RewriteCond %{QUERY_STRING} proc/self/environ [OR]
235 # Block out any script trying to set a mosConfig value through the URL 239 # Legacy configuration variable injection
g1smd 2011/03/28 21:54:47 # Block out any script trying to set a mosConfig v
236 RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR] 240 RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
237 # Block out any script trying to base64_encode or base64_decode data within the URL 241 # Block out any script trying to base64_encode stuff to send via URL
g1smd 2011/03/28 21:54:47 stuff to send via URL -> data within the URL
238 RewriteCond %{QUERY_STRING} base64_(en|de)code[^(]*\([^)]*\) [OR] 242 RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
g1smd 2011/03/28 21:54:47 No idea why a combined rule would fail. This is ba
243 # Block out any script trying to base64_decode stuff to send via URL
g1smd 2011/03/28 21:54:47 stuff to send via URL -> data within the URL
244 RewriteCond %{QUERY_STRING} base64_decode[^(]*\([^)]*\) [OR]
239 # Block out any script that includes a <script> tag in URL 245 # Block out any script that includes a <script> tag in URL
240 RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR] 246 RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
241 # Block out any script trying to set a PHP GLOBALS variable via URL 247 # Block out any script trying to set a PHP GLOBALS variable via URL
242 RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR] 248 RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
243 # Block out any script trying to modify a _REQUEST variable via URL 249 # Block out any script trying to modify a _REQUEST variable via URL
244 RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) 250 RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
245 # Return 403 Forbidden header and show the content of the root homepage 251 # Return a 403 Forbidden
g1smd 2011/03/28 21:54:47 # Return 403 Forbidden header and show the content
246 RewriteRule .* index.php [F] 252 RewriteRule .* index.php [F]
247 # 253 #
248 ########## End - Rewrite rules to block out some common exploits 254 ########## End - Rewrite rules to block out some common exploits
249 255
250 ########## Begin - File injection protection, by SigSiu.net 256 ########## Begin - File injection protection, by SigSiu.net
251 RewriteCond %{REQUEST_METHOD} GET 257 RewriteCond %{REQUEST_METHOD} GET
252 RewriteCond %{QUERY_STRING} [a-z0-9_]=http:// [NC] 258 RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
259 RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(\.\.\/{1,2}){1,} [OR]
260 RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]/{1,2}){1,} [NC]
g1smd 2011/03/28 21:54:47 Nice set of extra rules. Unusual use of /{1,2}. I'
253 RewriteRule .* - [F] 261 RewriteRule .* - [F]
254 ########## End - File injection protection 262 ########## End - File injection protection
255 263
256 ########## Begin - Advanced server protection rules exceptions #### 264 ########## Begin - Advanced server protection rules exceptions ####
257 ## 265 ##
258 ## These are sample exceptions to the Advanced Server Protection 2.0 266 ## These are sample exceptions to the Advanced Server Protection 3.0
259 ## rule set further down this file. 267 ## rule set further down this file.
260 ## 268 ##
261 ## Allow UddeIM CAPTCHA 269 ## Allow UddeIM CAPTCHA
262 RewriteRule ^components/com_uddeim/captcha15\.php$ - [L] 270 RewriteRule ^components/com_uddeim/captcha15\.php$ - [L]
263 ## Allow Phil Taylor's Turbo Gears 271 ## Allow Phil Taylor's Turbo Gears
264 RewriteRule ^plugins/system/GoogleGears/gears-manifest\.php - [L] 272 RewriteRule ^plugins/system/GoogleGears/gears-manifest\.php$ - [L]
g1smd 2011/03/28 21:54:47 Yes.
265 ## Allow JoomlaWorks AllVideos 273 ## Allow JoomlaWorks AllVideos
266 RewriteRule ^plugins/content/jw_allvideos/includes/jw_allvideos_scripts\.php - [ L] 274 RewriteRule ^plugins/content/jw_allvideos/includes/jw_allvideos_scripts\.php$ - [L]
g1smd 2011/03/28 21:54:47 Yes.
267 ## Allow Admin Tools Joomla! updater to run 275 ## Allow Admin Tools Joomla! updater to run
268 RewriteRule ^administrator/components/com_admintools/restore\.php - [L] 276 RewriteRule ^administrator/components/com_admintools/restore\.php$ - [L]
g1smd 2011/03/28 21:54:47 Yes.
269 ## Allow Akeeba Backup Professional's integrated restoration script to run 277 ## Allow Akeeba Backup Professional's integrated restoration script to run
270 RewriteRule ^administrator/components/com_akeeba/restore\.php - [L] 278 RewriteRule ^administrator/components/com_akeeba/restore\.php$ - [L]
g1smd 2011/04/02 00:13:10 Yes.
279 ## Allow Akeeba Kickstart
280 RewriteRule ^kickstart\.php$ - [L]
g1smd 2011/03/28 21:54:47 Nice.
271 281
272 # Add more rules to single PHP files here 282 # Add more rules to single PHP files here
273 283
274 ## Allow Agora attachments, but not PHP files in that directory! 284 ## Allow Agora attachments, but not PHP files in that directory!
275 RewriteCond %{REQUEST_FILENAME} !(\.php)$ 285 RewriteCond %{REQUEST_FILENAME} !(\.php)$
276 RewriteCond %{REQUEST_FILENAME} -f 286 RewriteCond %{REQUEST_FILENAME} -f
277 RewriteRule ^components/com_agora/img/members/ - [L] 287 RewriteRule ^components/com_agora/img/members/ - [L]
278 288
279 # Add more rules for allowing full access (except PHP files) on more directories here 289 # Add more rules for allowing full access (except PHP files) on more directories here
280 290
281 ## Uncomment to allow full access to the cache directory (strongly not recommend ed!) 291 ## Uncomment to allow full access to the cache directory (strongly not recommend ed!)
282 #RewriteRule ^cache/ - [L] 292 #RewriteRule ^cache/ - [L]
283 ## Uncomment to allow full access to the tmp directory (strongly not recommended !) 293 ## Uncomment to allow full access to the tmp directory (strongly not recommended !)
284 #RewriteRule ^tmp/ - [L] 294 #RewriteRule ^tmp/ - [L]
285 295
286 # Add more full access rules here 296 # Add more full access rules here
287 297
288 ########## End - Advanced server protection rules exceptions #### 298 ########## End - Advanced server protection rules exceptions ####
289 299
290 ########## Begin - Advanced server protection 300 ########## Begin - Advanced server protection
291 # Advanced server protection, version 2.0 - August 2010 301 # Advanced server protection, version 2.0 - August 2010
292 # by Nicholas K. Dionysopoulos 302 # by Nicholas K. Dionysopoulos
293 303
294 ## Referrer filtering for common media files. Replace with your own domain. 304 ## Referrer filtering for common media files. Replace with your own domain.
295 ## This blocks most common fingerprinting attacks ;) 305 ## This blocks most common fingerprinting attacks ;)
296 ## Note: Change www\.example\.com with your own domain name, substituting 306 ## Note: Change www\.domain\.com with your own domain name, substituting the dot s with
297 ## the dots with \. i.e. use www\.example\.com for www.example.com 307 ## \., i.e.: www\.example\.com for www.example.com
g1smd 2011/03/28 21:54:47 Not clear to read the \. part.
298 RewriteRule ^images/stories/([^.]+)\.(jpe?[g2]?|png|gif|bmp|css|js|swf|ico|html? ) - [L] 308 RewriteRule ^images/stories/([^.]+)\.(jp(eg|g|2)?|png|gif|bmp|css|js|swf|ico|htm l?)$ - [L]
g1smd 2011/03/28 21:54:47 $ - yes.
g1smd 2011/04/03 10:30:54 jp(eg|g|2)? simplifies to jp(e?g|2)? or jpe?[g2]?
299 RewriteCond %{HTTP_REFERER} . 309 RewriteCond %{HTTP_REFERER} .
300 RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com [NC] 310 RewriteCond %{HTTP_REFERER} !^https?://(www\.)?domain\.com [NC]
301 RewriteCond %{REQUEST_FILENAME} -f 311 RewriteCond %{REQUEST_FILENAME} -f
302 RewriteRule \.(jpe?[g2]?|png|gif|bmp|css|js|swf|ico|html?)$ - [F] 312 RewriteRule \.(jp(eg|g|2)?|png|gif|bmp|css|js|swf|ico|html?)$ - [F]
g1smd 2011/03/28 21:54:47 jp(eg|g|2)? simplifies to jp(e?g|2)? or jpe?[g2]?
303 313
304 ## Disallow visual fingerprinting of Joomla! sites (module position dump) 314 ## Disallow visual fingerprinting of Joomla! sites (module position dump)
305 ## Initial idea by Brian Teeman and Ken Crowder, see: 315 ## Initial idea by Brian Teeman and Ken Crowder, see:
306 ## http://www.slideshare.net/brianteeman/hidden-joomla-secrets 316 ## http://www.slideshare.net/brianteeman/hidden-joomla-secrets
307 ## Improved by @nikosdion to work more efficiently and handle template 317 ## Improved by @nikosdion to work more efficiently and handle template
308 ## and tmpl query parameters 318 ## and tmpl query parameters
309 RewriteCond %{QUERY_STRING} (^|&)tmpl=component [NC] 319 RewriteCond %{QUERY_STRING} (^|&)tmpl=(component|system) [NC]
g1smd 2011/03/28 21:54:47 Good catch.
310 RewriteRule .* - [L] 320 RewriteRule .* - [L]
311 RewriteCond %{QUERY_STRING} (^|&)tp= [NC,OR] 321 RewriteCond %{QUERY_STRING} (^|&)t(p|emplate|mpl)= [NC,OR]
g1smd 2011/03/28 21:54:47 Nice simplification.
g1smd 2011/04/02 00:13:10 [NC,OR] -> [NC]
312 RewriteCond %{QUERY_STRING} (^|&)template= [NC,OR]
313 RewriteCond %{QUERY_STRING} (^|&)tmpl= [NC]
314 RewriteRule .* - [F] 322 RewriteRule .* - [F]
315 323
316 ## Disallow PHP Easter Eggs (can be used in fingerprinting attacks to determine 324 ## Disallow PHP Easter Eggs (can be used in fingerprinting attacks to determine
317 ## your PHP version). See http://www.0php.com/php_easter_egg.php and 325 ## your PHP version). See http://www.0php.com/php_easter_egg.php and
318 ## http://osvdb.org/12184 for more information 326 ## http://osvdb.org/12184 for more information
319 RewriteCond %{QUERY_STRING} PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[ 0-9a-f]{12} [NC] 327 RewriteCond %{QUERY_STRING} \=PHP[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4} -[a-f0-9]{12} [NC]
320 RewriteRule .* - [F] 328 RewriteRule .* - [F]
321 329
322 ## Back-end protection 330 ## Back-end protection
323 ## This also blocks fingerprinting attacks browsing for XML and INI files 331 ## This also blocks fingerprinting attacks browsing for XML and INI files
324 RewriteRule ^administrator/?$ administrator/index.php [L] 332 RewriteRule ^administrator/?$ - [L]
g1smd 2011/03/28 21:54:47 Nice simplification.
325 RewriteRule ^administrator/index\.(php|html?)$ - [L] 333 RewriteRule ^administrator/index.html?$ - [L]
g1smd 2011/03/28 21:54:47 Escape literal periods.
326 RewriteRule ^administrator/index[23]\.php$ - [L] 334 RewriteRule ^administrator/index2?.php$ - [L]
g1smd 2011/03/28 21:54:47 Escape literal periods.
327 RewriteRule ^administrator/(components|modules|templates|images|plugins)/([^.]+) \.(jpe?[g2]?|png|gif|bmp|css|js|swf|html?)$ - [L] 335 RewriteRule ^administrator/(components|modules|templates|images|plugins)/([^.]+) \.(jp(eg|g|2)?|png|gif|bmp|css|js|swf|html?|mp(e|eg|3|4)|avi|wav|og(g|v)|xlsx?|d ocx?|pptx?|zip|rar|pdf|xps|txt|7z|svg|od(t|s|p)|flv|mov)$ - [L]
g1smd 2011/03/28 21:54:47 jp(eg|g|2)? simplifies to jp(e?g|2)? or jpe?[g2]?
g1smd 2011/03/28 21:54:47 mp(e|eg|3|4) simplifies to mp(eg?|3|4)
g1smd 2011/03/28 21:54:47 og(g|v) simplifies to og[gv]
g1smd 2011/03/28 21:54:47 od(t|s|p) simplifies to od[tsp]
g1smd 2011/04/02 00:13:10 mp(e|eg|3|4) simplifies to mp(eg?|[34])
328 RewriteRule ^administrator/ - [F] 336 RewriteRule ^administrator/ - [F]
329 337
330 ## Explicitly allow access only to XML-RPC's xmlrpc/index.php or plain xmlrpc/ d irectory 338 ## Explicitly allow access only to XML-RPC's xmlrpc/index.php or plain xmlrpc/ d irectory
331 RewriteRule ^xmlrpc/(index\.php)?$ - [L] 339 RewriteRule ^xmlrpc/(index\.php)?$ - [L]
332 RewriteRule ^xmlrpc/ - [F] 340 RewriteRule ^xmlrpc/ - [F]
333 341
334 ## Disallow front-end access for certain Joomla! system directories 342 ## Disallow front-end access for certain Joomla! system directories
335 RewriteRule ^includes/js/ - [L] 343 RewriteRule ^includes/js/ - [L]
336 RewriteRule ^(cache|includes|language|libraries|logs|tmp)/ - [F] 344 RewriteRule ^(cache|includes|language|libraries|logs|tmp)/? - [F]
337 345
338 ## Allow limited access for certain Joomla! system directories with client-acces sible content 346 ## Allow limited access for certain Joomla! system directories with client-acces sible content
339 RewriteRule ^(components|modules|plugins|templates)/([^.]+)\.(jpe?[g2]?|png|gif| bmp|css|js|swf|ico|html?)$ - [L] 347 RewriteRule ^(components|modules|plugins|templates)/([^.]+)\.(jp(eg|g|2)?|png|gi f|bmp|css|js|swf|html?|mp(e|eg|3|4)|avi|wav|og(g|v)|xlsx?|docx?|pptx?|zip|rar|pd f|xps|txt|7z|svg|od(t|s|p)|flv|mov)$ - [L]
g1smd 2011/03/28 21:54:47 Simplifications as above.
340 RewriteRule ^(components|modules|plugins|templates)/([^/]+/)*(index\.php)? - [L] 348 RewriteRule ^(components|modules|plugins|templates)/([^.]+)/index\.php(.*)$ - [L ]
g1smd 2011/03/28 21:54:47 ([^/]+/)* is "not a slash, one or more times, fol
g1smd 2011/03/28 21:54:47 The question mark makes this pattern match both <s
g1smd 2011/03/28 21:54:47 ([^.]+)/ is "not a period one or more times". No i
g1smd 2011/03/28 21:54:47 With trailing (.*) and no question mark this no lo
341 RewriteRule ^templates/([^.]+)\.php$ - [L] 349 RewriteRule ^templates/([^.]+)\.php$ $1 [L]
g1smd 2011/03/28 21:54:47 $1 should be - here. It is not the [^.] that makes
342 RewriteRule ^(components|modules|plugins|templates)/.+ - [F] 350 RewriteRule ^(components|modules|plugins|templates)/? - [F]
g1smd 2011/03/28 21:54:47 The .+ was a left over from earlier experimentatio
343 ## Changed above patterns to allow both /folder/ and /folder/index.php requests for JA Purity II
344 351
345 ## Disallow access to htaccess.txt, configuration.php, configuration.php-dist an d php.ini 352 ## Disallow rogue scripts in your site's root
346 RewriteRule ^(htaccess\.txt|configuration\.php(-dist)?|php\.ini)$ - [F] 353 # Exception: Allow Joomla!'s index.php and index2.php files
g1smd 2011/03/28 21:54:47 Matches configuration.php and configuration.php
354 RewriteRule ^index2?\.php$ - [L]
355 RewriteRule ^[^/]+\.php$ - [F]
g1smd 2011/04/03 12:46:31 Match "not a slash, followed by a period" will fai
356
357 ## Disallow access to htaccess.txt and configuration.php-dist
358 RewriteRule ^(htaccess\.txt|configuration\.php-dist)$ - [F]
g1smd 2011/03/28 21:54:47 Doesn't match configuration.php and php.ini
347 359
348 ## SQLi first line of defense, thanks to Radek Suski (SigSiu.net) @ 360 ## SQLi first line of defense, thanks to Radek Suski (SigSiu.net) @
349 ## http://www.sigsiu.net/presentations/fortifying_your_joomla_website.html 361 ## http://www.sigsiu.net/presentations/fortifying_your_joomla_website.html
350 ## May cause problems on legitimate requests 362 ## May cause problems on legitimate requests
351 RewriteCond %{QUERY_STRING} concat[^\(]*\( [NC,OR] 363 RewriteCond %{QUERY_STRING} concat[^\(]*\( [NC,OR]
352 RewriteCond %{QUERY_STRING} union([^s]*s)+elect[^\(]*\( [NC,OR] 364 RewriteCond %{QUERY_STRING} union([^s]*s)+elect.*[^\(]*\( [NC,OR]
g1smd 2011/03/28 21:54:47 union([^s]*s)+elect[^\(]*\( matches "union" foll
g1smd 2011/03/28 21:54:47 The .* is superfluous.
353 RewriteCond %{QUERY_STRING} union([^a]*a)+ll([^s]*s)+elect [NC] 365 RewriteCond %{QUERY_STRING} union([^a]*a)+ll([^s]*s)+elect [NC]
354 RewriteRule .* - [F] 366 RewriteRule .* - [F]
355 367
356 ########## End - Advanced server protection 368 ########## End - Advanced server protection
357 369
358 ########## Begin - Basic antispam Filter, by SigSiu.net 370 ########## Begin - Basic antispam Filter, by SigSiu.net
359 ## I removed some common words, tweak to your liking 371 ## I removed some common words, tweak to your liking
360 ## This code uses PCRE and works only with Apache 2.x. 372 ## This code uses PCRE and works only with Apache 2.x.
361 ## This code will NOT work with Apache 1.x servers. 373 ## This code will NOT work with Apache 1.x servers.
362 RewriteCond %{QUERY_STRING} \b(ambien|blue\spill|cialis|cocaine|ejaculation|erec tile)\b [NC,OR] 374 RewriteCond %{QUERY_STRING} \b(ambien|blue\spill|cialis|cocaine|ejaculation|erec tile)\b [NC,OR]
363 RewriteCond %{QUERY_STRING} \b(erections|hoodia|huronriveracres|impotence|levitr a|libido)\b [NC,OR] 375 RewriteCond %{QUERY_STRING} \b(erections|hoodia|huronriveracres|impotence|levitr a|libido)\b [NC,OR]
364 RewriteCond %{QUERY_STRING} \b(lipitor|phentermin|pro[sz]ac|sandyauer|tramadol|t royhamby)\b [NC,OR] 376 RewriteCond %{QUERY_STRING} \b(lipitor|phentermin|pro[sz]ac|sandyauer|tramadol|t royhamby)\b [NC,OR]
377 ## Note: The final RewriteCond must NOT use the [OR] flag.
365 RewriteCond %{QUERY_STRING} \b(ultram|unicauca|valium|viagra|vicodin|xanax|ypxai eo)\b [NC] 378 RewriteCond %{QUERY_STRING} \b(ultram|unicauca|valium|viagra|vicodin|xanax|ypxai eo)\b [NC]
366 ## Note: The final RewriteCond must NOT use the [OR] flag.
g1smd 2011/03/28 21:54:47 The note is on the end in case people add more Rew
367 RewriteRule .* - [F] 379 RewriteRule .* - [F]
380 ## Note: The previous lines are a "compressed" version
381 ## of the filters. You can add your own filters as:
382 ## RewriteCond %{QUERY_STRING} \bbadword\b [NC,OR]
383 ## where "badword" is the word you want to exclude
368 ########## End - Basic antispam Filter, by SigSiu.net 384 ########## End - Basic antispam Filter, by SigSiu.net
369 385
370 ########## Begin - Joomla! core SEF Section 386 ########## Begin - Joomla! core SEF Section
371 # 387 #
372 RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 388 RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
373 # 389 RewriteCond %{REQUEST_URI} !^/index.php
g1smd 2011/03/28 21:54:47 Escape literal periods.
374 # If the requested path and file is not /index.php and the request 390 RewriteCond %{REQUEST_URI} (/[^.]*|\.(php|html?|feed|pdf|raw|ini|zip|json|file)) $ [NC]
g1smd 2011/03/28 21:54:47 These notes now appear in the Joomla official file
375 # has not already been internally rewritten to the index.php script
376 RewriteCond %{REQUEST_URI} !^/index\.php
377 # and the request is for the site root, or for an extensionless URL,
378 # or the requested URL ends with one of the listed extensions
379 RewriteCond %{REQUEST_URI} (/[^.]*|\.(php|html?|feed|pdf|raw|ini|zip|json))$ [NC ]
380 # and the requested path and file doesn't directly match a physical file
381 RewriteCond %{REQUEST_FILENAME} !-f 391 RewriteCond %{REQUEST_FILENAME} !-f
382 # and the requested path doesn't directly match a physical folder
383 RewriteCond %{REQUEST_FILENAME} !-d 392 RewriteCond %{REQUEST_FILENAME} !-d
384 # internally rewrite the request to the index.php script
385 RewriteRule .* index.php [L] 393 RewriteRule .* index.php [L]
386 # 394 #
387 ########## End - Joomla! core SEF Section 395 ########## End - Joomla! core SEF Section
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld 1278:e6ce13d99bf5