Project

General

Profile

# Date Author Comment
11970 01/20/2014 11:33 AM Aaron Marcuse-Kubitza

moved everything into /trunk/ to create the standard svn layout, for use with tools that require this (eg. git-svn). IMPORTANT: do NOT do an `svn up`. instead, re-use your working copy's existing files with `svn switch` (http://svnbook.red-bean.com/en/1.6/svn.ref.svn.c.switch.html).

11649 11/13/2013 04:50 PM Aaron Marcuse-Kubitza

web/.htaccess: mod_autoindex: show .* files which are normally hidden, because these are important parts of our codebase. (the leading . is not used for access controls.) .svn folders will remain hidden to avoid clutter.

11039 09/21/2013 10:17 PM Aaron Marcuse-Kubitza

web/.htaccess: mod_autoindex: IndexHeadInsert: use IndexStyleSheet for stylesheet link instead

11034 09/21/2013 09:42 PM Aaron Marcuse-Kubitza

bugfix: web/.htaccess: mod_autoindex: IndexOptions: use +HTMLTable to ensure that the contents are always displayed in an HTML table, even when a header file is provided with HeaderName (which turns off the default HTML table for some reason)

10670 08/18/2013 07:58 PM Aaron Marcuse-Kubitza

bugfix: web/.htaccess: auto-detect dotpath in query string: need to include the path ($0) in the replacement, to avoid reverting to the root dir. (mod_rewrite replacements are not like relative URLs, which would interpret ?... as being relative to the current path, not the root.)

10669 08/18/2013 07:56 PM Aaron Marcuse-Kubitza

bugfix: web/.htaccess: auto-detect dotpath in query string: added missing $ at end of regexp

10612 08/07/2013 08:12 AM Aaron Marcuse-Kubitza

bugfix: web/.htaccess: parse dotpath in query string: make dotpath replacement start with ./ instead of / (which would incorrectly create an absolute URL path). this bug only appears when there is a trailing /, because this causes the matched text to be empty instead of a filesystem path with leading /.

10611 08/07/2013 08:04 AM Aaron Marcuse-Kubitza

bugfix: web/.htaccess: parse dotpath in query string: redirect so REQUEST_URI is populated from REQUEST_FILENAME: need to use - instead of $0 as the redirect destination so that REQUEST_FILENAME is used instead of the empty REQUEST_URI (i.e. the redirect vars are left untouched)

10610 08/07/2013 07:45 AM Aaron Marcuse-Kubitza

bugfix: web/.htaccess: parse dotpath in query string: need to add trailing / if dotpath so that dest path is URL path, not filesystem path (when trailing / missing, matched path is filesystem path)

9612 05/29/2013 10:15 AM Aaron Marcuse-Kubitza

bugfix: web/.htaccess: need to do DirectoryIndex redirects before checking for existing file/dir, because a DirectoryIndexed dir is existing but still needs to be redirected to the index.* file

9611 05/29/2013 10:01 AM Aaron Marcuse-Kubitza

web/.htaccess: mod_autoindex: use the main.css stylesheet to match the look-and-feel of index.php

9610 05/29/2013 10:00 AM Aaron Marcuse-Kubitza

web/.htaccess: mod_autoindex: Note that some listed files are not web-accessible: use ' instead of " to avoid \-escaping embedded "

9609 05/29/2013 09:39 AM Aaron Marcuse-Kubitza

web/.htaccess: mod_autoindex: sort by description when provided, to allow setting a custom (non-alphabetical) sort order using AddDescription

9608 05/29/2013 09:37 AM Aaron Marcuse-Kubitza

web/.htaccess: mod_autoindex: added note that some listed files are not web-accessible. they will produce a "Forbidden" error when clicked.

9604 05/29/2013 08:25 AM Aaron Marcuse-Kubitza

web/.htaccess: added mod_autoindex IndexOptions, in particular FoldersFirst

9603 05/29/2013 05:26 AM Aaron Marcuse-Kubitza

bugfix: web/.htaccess: changed "mod_dir listing"->"mod_autoindex listing" because mod_dir does not actually handle the autogenerated listings

9602 05/29/2013 05:24 AM Aaron Marcuse-Kubitza

bugfix: web/.htaccess: DirectoryIndex: use disabled instead of on because on is actually treated as a filename, and does not invoke mod_autoindex. the DirectoryIndex directive and the mod_dir module actually apply only to manual index files, not to autogenerated dir listings (which are handled by mod_autoindex).

9600 05/29/2013 04:43 AM Aaron Marcuse-Kubitza

web/.htaccess: <dir>/all forces mod_dir listing: use simpler $mod_dir_listing env var instead of query string modification to indicate that an explicit mod_dir listing should be displayed. this causes /all to replace ?index=1 as the way to force a mod_dir listing. note that the %{ENV:...} test needs to use $REDIRECT_mod_dir_listing instead of $mod_dir_listing, because a redirect will occur between the /all rule and the index.* rule, causing all env vars to be prepended with REDIRECT_ .

9599 05/29/2013 03:48 AM Aaron Marcuse-Kubitza

web/.htaccess: <dir>/all forces mod_dir listing, as a simpler syntax than ?index=1

9598 05/29/2013 03:28 AM Aaron Marcuse-Kubitza

web/.htaccess: for dirs, redirect to index.*: allow requesting a mod_dir listing instead with ?index=1

9597 05/29/2013 03:26 AM Aaron Marcuse-Kubitza

web/.htaccess: handle DirectoryIndex redirects in a RewriteRule instead of with `DirectoryIndex index`, so that RewriteConds can be used to configure when index.* is used as the DirectoryIndex instead of a mod_dir listing

9596 05/29/2013 02:30 AM Aaron Marcuse-Kubitza

web/.htaccess: handle DirectoryIndex subrequests when there is no DirectoryIndex: moved comment about -F subrequest after line it applies to

9594 05/29/2013 02:19 AM Aaron Marcuse-Kubitza

web/.htaccess: RewriteRules: added standard [discardpath,noescape,qsappend] options where missing (these should be the default, but aren't)

8507 04/14/2013 09:19 PM Aaron Marcuse-Kubitza

web/**/.htaccess: RewriteRules: ensured flags are in alphabetical order

8505 04/14/2013 09:07 PM Aaron Marcuse-Kubitza

web/.htaccess: parse dotpath in query string: moved parsing from dotpath.php to RewriteRules. with the eventual addition of config env vars, this makes it possible for subdirs to configure their own dotpath parsing, rather than having all levels of the dotpath translated to a URL path. (for inner levels, it may el.g. be more appropriate to parse the dotpath as query params or pass it along to an external URL.) note that it takes only two lines of mod_rewrite (plus a workaround RewriteRule) to replace over a dozen lines of PHP code.

8504 04/14/2013 08:54 PM Aaron Marcuse-Kubitza

web/.htaccess: renamed REQUEST_URI_no_/ to REQUEST_URI_no_extra_/ to clarify that only an excess / is removed

8503 04/14/2013 08:52 PM Aaron Marcuse-Kubitza

web/.htaccess: moved set REQUEST_URI_no_/ under translate subdomain to path because it needs to be set right before being used to be accurate

8502 04/14/2013 08:44 PM Aaron Marcuse-Kubitza

web/.htaccess: setting REQUEST_URI_no_/: use one RewriteCond instead of two since the regexps can be combined

8501 04/14/2013 02:50 PM Aaron Marcuse-Kubitza

web/.htaccess: parse dotpath in query string: removed dotpath auto-detection code because this is now handled by a separate RewriteRule

8500 04/14/2013 02:49 PM Aaron Marcuse-Kubitza

web/.htaccess: auto-detect dotpath in query string (having a . before any = ) and mark it using a leading . . this is done as a separate step so that the dotpath is already explicitly marked as such when it's parsed.

8498 04/14/2013 01:08 PM Aaron Marcuse-Kubitza

web/.htaccess: prepend dir name if it's part of the filename: support MultiViews filenames without the extension, by using a lookahead request -F instead of a regular -f

8496 04/14/2013 12:59 PM Aaron Marcuse-Kubitza

web/.htaccess: prepend dir name if it's part of the filename (this works only if the dir supports relative redirects and sets %{ENV:innermost_dir})

8491 04/14/2013 09:32 AM Aaron Marcuse-Kubitza

web/.htaccess: parse dotpath in query string: heuristically detect query strings that don't contain dotpaths (such as mod_autoindex sort conditions), rather than always interpreting the part before the first & as the dotpath. now, the part before the first & will be interpreted as a dotpath if it has a . before any = . (query param names containing . are rare, so this usually works correctly.) note that you can always prepend . to force a dotpath, or & to force a query param.

8483 04/14/2013 04:29 AM Aaron Marcuse-Kubitza

bugfix: web/.htaccess: auto-add trailing /: %{LA-F:REQUEST_FILENAME} lookaheads don't work, because they do not show the externally redirected URL, so we need to use an alternate mechanism instead, which just assumes that any dir containing an .htaccess file may contain a redirect and ignores just those dirs (subdirs are not ignored and will receive a trailing / as expected). To create the trailing / effect when you have a .htaccess without an external redirect, you need to manually tell it to correct the path for just that dir without the / (i.e. match ^/ , because a trailing / causes mod_rewrite to use an absolute filesystem path instead).

8482 04/14/2013 04:21 AM Aaron Marcuse-Kubitza

web/.htaccess: moved auto-add trailing / to after don't rewrite existing dirs, so that the path will automatically not be rewritten if it contains a trailing / and is a dir

8481 04/14/2013 04:18 AM Aaron Marcuse-Kubitza

web/.htaccess: don't rewrite existing paths: only prevent existing dirs with trailing / from being rewritten, because dirs without trailing / may be redirected

8478 04/14/2013 01:27 AM Aaron Marcuse-Kubitza

web/.htaccess: auto-add trailing / if not external redirect: added test if `%{REQUEST_FILENAME} -d` in addition to checking %{LA-F:REQUEST_FILENAME}, because there are some cases (e.g. subdirs that are symlinked outside the DOCUMENT_ROOT) where LA-F:REQUEST_FILENAME for some reason appends /home to the REQUEST_FILENAME, but the current REQUEST_FILENAME is fortunately already a dir and can be checked directly

8477 04/14/2013 01:07 AM Aaron Marcuse-Kubitza

web/.htaccess: auto-add trailing / if not external redirect: removed no longer applicable comment that dir without trailing / is provided as an absolute filesystem path, because this is only true in inner .htaccess files for their top-level dirs

8476 04/14/2013 01:01 AM Aaron Marcuse-Kubitza

bugfix: web/.htaccess: auto-add trailing / if not external redirect: match any path that does not end in / (and satisfies the -d lookahead), rather than only absolute filesystem paths, which are only applicable in inner .htaccess files (and even then only for the outermost dir they control) but not in the top-level .htaccess file. Note that the inner .htaccess files can still use ^/ to match their own dir, just not their subdirs, without a trailing / .

8475 04/14/2013 12:25 AM Aaron Marcuse-Kubitza

bugfix: web/.htaccess: auto-add trailing / if not external redirect: replace with "%{REQUEST_URI}/" instead of the empty string (which gets auto-translated to have a trailing /), because the empty string only works in the top-level dir of the .htaccess file (it redirects to the RewriteBase, which ends in /). The entire REQUEST_URI is needed to do the auto-add in dirs which do not have their own auto-add trailing / rule. Also, using REQUEST_URI avoids the need to (sometimes) set RewriteBase for use by relative URLs in replacement strings, because this is an absolute URL instead. Setting RewriteBase manually is best avoided, because it hardcodes the URL path to the .htaccess file, which may change.

8474 04/14/2013 12:17 AM Aaron Marcuse-Kubitza

bugfix: web/.htaccess: auto-add trailing / if not external redirect: use "%{LA-F:REQUEST_FILENAME} d" instead of "$0 -F" so that the actual value of REQUEST_FILENAME tested, and $0 can also match strings which are not file paths. This is because only those no-trailing/-paths which did not match the RewriteBase are provided to mod_rewrite as absolute filepaths, but RewriteBase is not an issue in the outermost .htaccess (because the RewriteBase is / , which is always matched). This means the method of testing for ^/ to match a no-trailing-/-path will only work in inner .htaccess files (where it is currently used extensively).

8473 04/13/2013 05:47 PM Aaron Marcuse-Kubitza

web/.htaccess: bugfix: moved auto-add trailing / if not external redirect to before don't rewrite existing paths because the trailing / also needs to be added on paths which are existing paths, but are just missing the trailing /

8472 04/13/2013 06:37 AM Aaron Marcuse-Kubitza

web/.htaccess: auto-add trailing / if not external redirect (limited form of DirectorySlash). this allows URLs without trailing /, for dirs which have a special external redirect to the datasource's homepage when there is no trailing /, but still auto-adds the trailing / for all other dirs.

8450 04/11/2013 04:52 PM Aaron Marcuse-Kubitza

web/**/.htaccess: Use [qsappend] flag with all RewriteRules to ensure that the original query string is never lost

8447 04/11/2013 02:34 PM Aaron Marcuse-Kubitza

web/.htaccess: handle DirectoryIndex subrequests when there is no DirectoryIndex, by deleting the /index filename. This ensures that any fallback redirect is not invoked, and instead the action corresponding to a trailing / (usually the display of a directory listing) is performed.

8443 04/10/2013 11:17 PM Aaron Marcuse-Kubitza

web/.htaccess: Support rules being inherited by subdirs using InheritBefore, by setting an env var $innermost_dir that stores the name of the innermost subdir to contain an .htaccess file. This env var can then be tested for in a RewriteCond in rules that should only apply locally. This works because SetEnvIf processes directives from the outer dir to the inner dir, so that the inner dir's setting comes last and is the final value of $innermost_dir. Note that you must use SetEnvIf rather than SetEnv because "The internal environment variables set by [SetEnv] are set after most early request processing directives are run, such as access control and URI-to-filename mapping. If the environment variable you're setting is meant as input into this early phase of processing such as the RewriteRule directive, you should instead set the environment variable with SetEnvIf." [emphasis added] (http://httpd.apache.org/docs/current/mod/mod_setenvif.html#setenvif)

8442 04/10/2013 10:20 PM Aaron Marcuse-Kubitza

web/.htaccess: don't rewrite existing paths: Changed match string to what is used in subdirs, so that if this rule is inherited, what is considered an existing path (i.e. a file or subdir) is restricted appropriately

8441 04/10/2013 10:18 PM Aaron Marcuse-Kubitza

web/**/.htaccess: no-replacement RewriteRules: Removed the standard [discardpath,noescape] flags because they add unnecessary clutter and are not needed for this type of rule. Note that these flags are still required on regular RewriteRules which have a replacement string.

8440 04/10/2013 10:15 PM Aaron Marcuse-Kubitza

web/**/.htaccess: no-replacement RewriteRules: Use just ^ as the match string because there is no need to actually match characters. This also makes it easy to visually tell what is a no-replacement RewriteRule vs. a RewriteRule that matches the entire path.

8439 04/10/2013 10:11 PM Aaron Marcuse-Kubitza

web/.htaccess: Renamed $REQUEST_URI_NO_SLASH to $REQUEST_URI_no_/ to take advantage of (some) special chars being allowed in env var names

8437 04/10/2013 09:08 PM Aaron Marcuse-Kubitza

web/.htaccess: fallback redirect: Use new VegCore/ instead of specifying the full wiki URL

8432 04/10/2013 08:28 PM Aaron Marcuse-Kubitza

web/.htaccess: translate subdomain to path: Use new REQUEST_URI_NO_SLASH to avoid adding an automatic trailing / when a subdir was reached as a subdomain without a path (e.g. VegBank.vegpath.org), which should be equivalent to going to the subdir's homepage (vegpath.org/VegBank) rather than to its directory listing (vegpath.org/VegBank/ ; note the trailing /)

8431 04/10/2013 08:25 PM Aaron Marcuse-Kubitza

web/.htaccess: set REQUEST_URI_NO_SLASH for use by translating subdomain to path

8413 04/10/2013 12:12 PM Aaron Marcuse-Kubitza

web/.htaccess: Use new %{REQUEST_SCHEME} to construct self-refential URLs

8405 04/10/2013 06:15 AM Aaron Marcuse-Kubitza

web/**/.htaccess: RewriteOptions: Removed inherit because if the destination is not found in the current dir, a 404 should be returned instead of trying to invoke the parent dir's fallback handler (which applies only to paths in the parent dir). Ideally, we would use InheritBefore to get the subdomain preprocessing, etc., but the parent dir's fallback handler would still need to be turned off somehow when the rule was being run by a subdir.

8404 04/10/2013 05:59 AM Aaron Marcuse-Kubitza

web/.htaccess: Only forward specific terms (subpaths) to VegCore, not also the dir index itself

8403 04/10/2013 05:15 AM Aaron Marcuse-Kubitza

web/**/.htaccess: RewriteOptions: Added AllowNoSlash (available in Apache 2.4) so dir paths without the trailing / can be parsed by mod_rewrite

8402 04/10/2013 05:12 AM Aaron Marcuse-Kubitza

web/.htaccess: Turned off DirectorySlash so that the dir without the trailing / can have a separate meaning (e.g. as the home page of a datasource, rather than a listing of the short URLs available for it)

8400 04/10/2013 03:29 AM Aaron Marcuse-Kubitza

web/**/.htaccess: parse dotpath in the query string: Use just dotpath instead of dotpath.php because the extension is added automatically by MultiViews

8399 04/10/2013 03:28 AM Aaron Marcuse-Kubitza

web/**/.htaccess: parse dotpath in the query string: Remove any index.* suffix, which is added by MultiViews in Apache 2.4

8397 04/10/2013 03:21 AM Aaron Marcuse-Kubitza

web/.htaccess: Set Options +Indexes because this isn't the default in Apache 2.4

8396 04/10/2013 01:46 AM Aaron Marcuse-Kubitza

web/.htaccess: DirectoryIndex: Use index instead of hardcoding index.php because MultiViews will now add the appropriate extension automatically

8395 04/10/2013 01:44 AM Aaron Marcuse-Kubitza

web/.htaccess: Turn on MultiViews to allow auto-adding of the file extension

8390 04/09/2013 10:43 PM Aaron Marcuse-Kubitza

web/.htaccess: use separate lowercase version when available: Support paths without a trailing /

8389 04/09/2013 10:41 PM Aaron Marcuse-Kubitza

web/.htaccess: use separate lowercase version when available: Fixed bug where need to use [last] flag, in order to rewrite in the new subdir instead of applying the rest of this dir's rules (which would forward to VegCore)

8387 04/09/2013 10:10 PM Aaron Marcuse-Kubitza

web/.htaccess: Use %{REQUEST_URI} ("The path component of the requested URI" <http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond&gt;) instead of /$0, in order to preserve whether or not the path had a trailing slash. This also ensures that the rule functions correctly if it is invoked in a subdir context, which may occur for the "remove www subdomain" rule.

8386 04/09/2013 10:01 PM Aaron Marcuse-Kubitza

web/.htaccess: Removed "don't redirect subdir paths" because this is now handled by "don't rewrite existing paths" as described in r8375

8371 04/09/2013 02:36 PM Aaron Marcuse-Kubitza

Renamed www/ back to web/

8368 04/09/2013 02:24 PM Aaron Marcuse-Kubitza

web/: Moved auxiliary files into the main/ subdir in preparation for having just the web/ dir. Renamed web/ to www/ so it can be replaced with web/main/.

8363 04/09/2013 01:06 PM Aaron Marcuse-Kubitza

web/main/**/.htaccess: Support dotpaths in the query string instead of in the path, so that non-dotpath paths don't need to be suffixed with / to prevent their filenames from being interpreted as dotpaths. Putting dotpaths in the query string still requires only one character between the host and the path, but it's ? instead of / . ? is in many ways more natural, because the dotpath is a non-filesystem string to be parsed rather than something that's already a filesystem path. This change also avoids the need to strip trailing /s in many RewriteRules, because the dotpath mechanism is no longer appending them.

8178 03/25/2013 10:23 PM Aaron Marcuse-Kubitza

web/main/.htaccess: remove linewraps (of the form table.path.vg/_-term) used to create a newline for Google spreadsheets

8060 03/16/2013 05:45 AM Aaron Marcuse-Kubitza

web/main/**/.htaccess: Removed RewriteCond -l tests because one of the -d or -f tests will always also pass, making the -l test unnecessary

8058 03/16/2013 05:19 AM Aaron Marcuse-Kubitza

web/main/.htaccess: use separate lowercase version when available: Also support input strings in mixed case which is not the default capitalization, in addition to all-lowercase strings

8057 03/16/2013 05:18 AM Aaron Marcuse-Kubitza

web/main/.htaccess: use separate lowercase version when available: Generate the new dirname with a separate RewriteCond so its value can be used both in the -d test and in the replacement string, rather than separately for each

8056 03/16/2013 05:03 AM Aaron Marcuse-Kubitza

web/main/.htaccess: translate dotpaths: Allow an unescaped . at the beginning of a filename, because this will never be a . separator. This adds support for hidden files in dir paths, which now won't be interpreted as dotpaths. However, regular files with extensions still need to have the filename escaped because it will otherwise be interpreted as a dotpath.

8055 03/16/2013 04:53 AM Aaron Marcuse-Kubitza

web/main/.htaccess: Set Options +FollowSymLinks. It should be on by default ("All options except for MultiViews. This is the default setting." <http://httpd.apache.org/docs/2.2/mod/core.html#options&gt;), but this makes sure it will always be enabled.

8054 03/16/2013 03:32 AM Aaron Marcuse-Kubitza

web/main/.htaccess: Name the lowercased versions of dirs with a leading . (to make them hidden) instead of a trailing _ , to avoid having each dir listed twice in a row in the dir index

8045 03/16/2013 01:51 AM Aaron Marcuse-Kubitza

web/main/**/.htaccess: don't redirect subdir paths: Fixed bug where can only match non-empty string, because otherwise the rule would match this directory, which should still have its redirects processed

8041 03/16/2013 01:32 AM Aaron Marcuse-Kubitza

web/main/.htaccess: Added fallback redirect to VegCore for paths without a namespace. This can be used to link to specific VegCore terms without needing to include the VegCore namespace.

8035 03/16/2013 12:24 AM Aaron Marcuse-Kubitza

web/main/.htaccess: Support lowercase versions of mixed-case dirnames without breaking case-insensitive filesystems such as Mac HFS+

8031 03/15/2013 07:31 PM Aaron Marcuse-Kubitza

web/main/.htaccess: translate dotpaths: Allow the part before the [] escape to contain [], to support labels that end in [] (like PHP array vars in the query string) labels with a simple array-subscript syntax (a[b]). This also shortens the regexp and makes it more readable without the \[\] in [^.\[\]/] . Note that this also allows invalid combinations of [] exprs (e.g. more than one per level or unbalanced []), which will still be translated but will probably not have the desired result.

8030 03/15/2013 07:16 PM Aaron Marcuse-Kubitza

web/main/.htaccess: translate dotpaths: Inline the [] escape regexp into the main regexp, because it is now approximately the same length as the []-matching portion of the main regexp and this greatly simplifies the code by removing the extra RewriteCond. Note that the translation rule is now a plain regexp (run repeatedly until no match), which can be used in any programming language that supports Perl-compatible regular expressions, not just mod_rewrite.

8029 03/15/2013 07:06 PM Aaron Marcuse-Kubitza

web/main/.htaccess: translate dotpaths: discardpath explanation: Clarified that the infinite loop resulted from reappending PATH_INFO (the Apache-matched filename)

8028 03/15/2013 07:02 PM Aaron Marcuse-Kubitza

web/main/.htaccess: translate dotpaths: Require any [] escape to have the ] at the end of the level, to simplify the [] regexp

8027 03/15/2013 06:54 PM Aaron Marcuse-Kubitza

web/main/.htaccess: translate dotpaths: Use a lookahead assertion to ensure that at least one character is matched as the head of the dotpath. This ensures that (.*/)? + the rest of the regexp does not match a path with a trailing /, which is a sealed /-path and not subject to dotpath translation.

8026 03/15/2013 06:46 PM Aaron Marcuse-Kubitza

web/main/.htaccess: translate dotpaths: Only support one [] escape per dot-level to (greatly) shorten the [] regexp. This does not pose a problem for encoding . because the entire level can simply be enclosed in [].

8025 03/15/2013 06:17 PM Aaron Marcuse-Kubitza

web/main/.htaccess: Uncommented ErrorDocument

8024 03/15/2013 06:15 PM Aaron Marcuse-Kubitza

web/main/.htaccess: translate dotpaths: Removed separate sealing of the /-path, which is now performed by the main RewriteRule because it appends a / even if there is no . suffix. This does not cause an infinite loop because a character is always added (/), which prevents the previously-matched head (after the last / but before any .) from being matched again.

8023 03/15/2013 06:05 PM Aaron Marcuse-Kubitza

web/main/.htaccess: translate dotpaths: Fixed bug where it's actually the portion before the . (but after the last /) that should be subject to []-unescaping, rather than the portion after the . . Fixed bug where [] escapes were not being unescaped because the wildcard .* group matched the whole head portion instead of allowing the []-captures to match.

8022 03/15/2013 03:17 PM Aaron Marcuse-Kubitza

web/main/.htaccess: translate subdomain to path: Don't use expr RewriteConds because they are not supported by Apache 2.2. Instead issue an external redirect with the subdomain part of the hostname removed, for the purpose of changing HTTP_HOST so that the replacement is not performed again if the mod_rewrite rules are run more than once.

8017 03/15/2013 01:55 PM Aaron Marcuse-Kubitza

web/main/.htaccess: translate dotpaths: Fixed bug where can't remove all [] escapes, because this would also remove [] from protected parts of the URL (i.e. before the last /). Instead just remove up to two [] escapes per dot-level, e.g. a.[b.c]=[d.e] -> a/b.c=d.e . Note that this removes the restriction against URLs containing "[]", because these [] will be left as-is as long as they are followed at some point by a / .

8015 03/15/2013 01:17 PM Aaron Marcuse-Kubitza

web/main/.htaccess: translate dotpaths: replace all unescaped . with / : Allow empty components on either side of the . , to ensure that all unescaped dots are consistently replaced with / . Note that hidden directories that start with . will have the . preserved, because they have (or get) a trailing slash, which prevents dotpath from operating on them.

8014 03/15/2013 01:13 PM Aaron Marcuse-Kubitza

web/main/.htaccess: translate dotpaths: remove all [] escapes: Also remove empty [] to allow permalinking clients to easily generate escaped strings by URL-encoding the value and enclosing it in [], which will now also work even if the value is empty. This change will break any destination URLs that use "[]", such as PHP scripts that use this to indicate an array variable in the query string. In these URLs, the [] must now be %-encoded.

8013 03/15/2013 01:00 PM Aaron Marcuse-Kubitza

web/main/.htaccess: RewriteRules with [redirect] and http:// : Removed [redirect] because it is implied when the replacement is an absolute URL

8012 03/15/2013 12:57 PM Aaron Marcuse-Kubitza

web/main/.htaccess: RewriteRules with [redirect]: Added last because apparently redirect will not immediately cause the redirect, and will instead continue rewriting the URL ("You will almost always want to use [R] in conjunction with [L] (that is, use [R,L]) because on its own, the [R] flag prepends http://thishost[:thisport] to the URI, but then passes this on to the next rule in the ruleset, which can often result in 'Invalid URI in request' warnings." <http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_r&gt;)

8011 03/15/2013 12:34 PM Aaron Marcuse-Kubitza

web/main/.htaccess: RewriteRules: Added [discardpath,noescape] flags to all rules, because these are needed for correct interpretation of the replacement and should be the default setting. For some rules they may be optional, but it is better to include them on all rules to ensure there is never an unexpected effect from omitting them.

8010 03/15/2013 12:29 PM Aaron Marcuse-Kubitza

web/main/.htaccess: Added "RewriteOptions inherit" because this1 should be the default setting, to ensure that global filter rules also occur in subdirs. Note that the presence of this directive in this .htaccess file does not solve this problem, but putting it there will remind writers of subdir .htaccess files that they need to include that directive....

8006 03/15/2013 11:44 AM Aaron Marcuse-Kubitza

web/main/.htaccess: mod_rewrite: Removed unneeded RewriteBase, because the default setting for RewriteBase is actually the dir of the .htaccess file itself, rather than always / . ("RewriteRule can be used in per-directory config files (.htaccess). There it will act locally, i.e., the local directory prefix is stripped at this stage of processing and your rewriting rules act only on the remainder. At the end it is automatically added back to the path." <http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteBase&gt;)

8001 03/15/2013 08:20 AM Aaron Marcuse-Kubitza

web/main/.htaccess: translate dotpaths to /-paths: Added examples

8000 03/15/2013 08:04 AM Aaron Marcuse-Kubitza

web/main/.htaccess: translate dotpaths to /-paths: Translate all .-separated components in the path to / instead of just those that exist in the filesystem. This allows per-source rules to match just a / for the path-element separator instead of sometimes / and other times . (depending on whether that portion of the dotpath had been translated). Support [] escapes that preserve any . they surround, e.g. a.[b.c] -> a/b.c . (Supporting []-escapes requires that the /-path be "sealed" by appending a / , to prevent the . -> / translation rule from reinterpreting a newly-unescaped [] sequence as a dotpath. This also requires that the translation rule ignore anything before the last /, because it could have been []-unescaped by a previous round of mod_rewrite, e.g. in another dir. All the per-source rules need to be retrofitted to support the new trailing / .) Note also the discardpath flag (http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_dpi) on all RewriteRules that perform a replacement on the input string (i.e. that have a pattern other than ^.*$). This flag is needed to avoid infinite loops, because otherwise, a critical bug in mod_rewrite causes it to reappend the filename portion of the input string (PATH_INFO) to the result, causing it to be present twice, e.g. a/b -> a/b/b (https://issues.apache.org/bugzilla/show_bug.cgi?id=38642).