0

I am trying to server a static HTML site from /sites/default/files/staticsite and make it available via a subdomain. I'm hosting the site on Acquia Cloud, and their docs describe Maintaining a static microsite alongside Drupal's docroot.

This solution is working, with the exception of index.html page (homepage) which returns a 404.

  • http://subdomain.example.com/ returns a 404
  • http://subdomain.example.com/index.html success

The setup describe in the docs

I have added the required domain to my Acquia Cloud dashboard so the server will accept requests for the subdomain.

I have updated docroot/.htaccess with the following RewriteRule to redirect requests to the static files. The following rules are the first lines in the .htaccess file.

<IfModule mod_rewrite.c>
  RewriteEngine on
  # Only serve the static site for a particular host.
  RewriteCond %{HTTP_HOST} ^subdomain\.example\.com\.au$ [OR]
  RewriteCond %{HTTP_HOST} ^dev-subdomain\.example\.com\.au$ [OR]
  RewriteCond %{HTTP_HOST} ^stage-subdomain\.example\.com\.au$
  # Don't loop anything targeting the actual mask directory, to allow
  # for linked scripts, stylesheets etc in the static HTML
  RewriteCond %{REQUEST_URI} !^/sites/default/files/staticsite/
  #Any requests that made it this far are served from the /staticsite/ directory
  RewriteRule ^(.*)$ /sites/default/files/staticsite/$1 [PT,L]
</IfModule>

The files have been uploaded to sites/default/files/staticsite

Things I've tried

I thought DirectoryIndex must be disabled for these directories so I tried adding DirectoryIndex index.html in both /sites/default/files and /sites/default/files/staticsite but neither have had an effect.

I tried elevating the DirectoryIndex directive to the top of the existing /sites/default/files/.htaccess file, as well as placing it last. Neither fixed the 404 error.

I've tried removing the /sites/default/files/.htaccess and adding a new .htaccess file with just DirectoryIndex index.html to test if the SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006 was impacting things. No change still got 404.

I've tried adding the [END] flag to the RewriteRule to stop the current rewrite process and subsequent rewrite processes, but still got the 404.

Log entries

When making a request to `http://subdomain.example.com/ I see the following entry in the Apache error log:

Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

I'm unable to define 'LogLevel` because Acquia Cloud do not provide access to the server config, virtual host, and directory contexts which this directive can be defined in.

  • What is the result of "Use 'LogLevel debug' to get a backtrace." – Clemens Tolboom Feb 3 '18 at 9:09
  • Unable to provide LogLevel backtrace because this directive cannot be defined within .htaccess and Acquia Cloud do not provide access to the contexts it can be defined. – Andrew Feb 5 '18 at 12:29
  • 1
    I found this stackoverflow.com/questions/9153262/… for more tips. – Clemens Tolboom Feb 7 '18 at 7:06
0

Start by getting the base site working at your Drupal domain then slowly add Rewrite rules. First remove everything you've added to the .htaccess files and elsewhere, upload the site to the directory you want and see if you can access it.

http://www.example.com/sites/default/files/staticsite

If that doesn't works then the problem is probably the current .htaccess configuration (docroot or files directory). If it does work, move on to the next stage.

The next step is to get your custom hostname working. This seems pretty straight forward from the Acquia docs:

RewriteCond %{HTTP_HOST} ^subdomain\.example.com\.com$
# Don't loop anything targeting the actual mask directory, to allow
# for linked scripts, stylesheets etc in the static HTML
RewriteCond %{REQUEST_URI} !^/sites/default/files/staticsite/
# pass-through the matching file from beneath /sites/default/files/ and stop processing
RewriteRule ^(.*)$ /sites/default/files/staticsite/$1 [PT,L]

Important: The above needs to be inserted before the following. If it's not, non-file requests (such as directory index / ) may redirect to index.php instead.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]

If that works, start adding the other domains one by one and testing.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.