# Configuring Apache for MetacatUI There are two Apache configurations needed for MetacatUI to work properly. 1. Configure Apache to serve `index.html` instead of a 404 for the MetacatUI directory 2. Allow encoded slashes in MetacatUI paths ### Configure Apache to serve `index.html` instead of a 404 for the MetacatUI directory **Why do I need this?** MetacatUI is a single-page Javascript application which uses a single `index.html` file to initialize the MetacatUI app. The app checks the path that the user has navigated to (e.g. `/data/page/2`), and renders the corresponding view. Then MetacatUI listens to each link click in the app and renders the next view for that link. This means there is no server-side application or files that are serving up HTML responses for each MetacatUI path. For this all to work, you need to tell your web server to serve the `index.html` MetacatUI page for every MetacatUI path. Otherwise, your server will return a 404 error. #### Apache v2.2.16 and later Add the `FallbackResource` Apache directive: ```apache ... # Serve index.html instead of a 404 error in the MetacatUI directory FallbackResource /metacatui/index.html ... ``` #### Apache v2.2.15 and earlier Add a `mod_rewrite` Apache directive for the MetacatUI index.html file: ```apache ... ... RewriteEngine On RewriteBase / RewriteRule ^index\.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.html [L] ``` ### Allow encoded slashes in MetacatUI paths Add the following to your Apache configuration file: ```apache ... # Allow encoded slashes in URLs so encoded identifiers can be sent in MetacatUI URLs AllowEncodedSlashes On ... ``` **Why do I need this?** `/` characters are commonly used in identifiers for data and metadata objects in Metacat repositories. These identifiers are used in MetacatUI paths and are usually URL-encoded. ## Configuring Apache locally on Mac OS X, for MetacatUI development Note: The following instructions are general guidelines on how to set up a local Apache server so you can develop MetacatUI features/bugs on your local machine. These instructions are *not* updated regularly, since we recommend you use the [NodeJS Express server instead](https://github.com/NCEAS/metacatui/blob/master/server.js). #### Step 1. Create a directory for your MetacatUI - Choose a location from which to serve *all* your Apache website files. A good location is `/Users/{username}/Sites` - Make a subdirectory in `~/Sites` specifically for MetacatUI. The default directory name for MetacatUI is `metacatui`. ```bash mkdir ~/Sites/metacatui ``` #### Step 2. Tell Apache to use the directory from Step 1 - Configure Apache to serve files from your `Sites` directory by opening `/etc/apache2/httpd.conf` and changing the `DocumentRoot` pathname. Example: ```apache DocumentRoot "/Users/walker/Sites" ``` #### Step 3. Configure a VirtualHost in Apache for MetacatUI - First, create a backup of the default httpd-vhosts.conf file: ```bash sudo cp /etc/apache2/extra/httpd-vhosts.conf /etc/apache2/extra/httpd-vhosts.conf.bak ``` - Clear out the example VirtualHost configuration if it is there, and add a VirtualHost for the `~/Sites/metacatui` directory (make sure `walker` is replaced with your username): ```apache DocumentRoot "/Users/walker/Sites" ServerName metacatui.localhost ErrorLog "/private/var/log/apache2/metacatui-error_log" CustomLog "/private/var/log/apache2/metacatui-access_log" common # Allow encoded slashes in URLs so encoded identifiers can be sent in MetacatUI URLs AllowEncodedSlashes On FallbackResource /metacatui/index.html ``` - Create a host name for `metacatui.locahost`. First, open `/etc/hosts`: ```bash sudo vi /etc/hosts ``` - Add `metacatui.localhost` to the bottom of the file. **Be careful not to change any other part of this file!**: ``` # metacatui local site 127.0.0.1 metacatui.localhost ``` - Save your `/etc/hosts` changes #### Step 4. Move MetacatUI files to Apache - Move the MetacatUI application code to the directory we chose in Step 2. ```bash cp -rf metacatui-2.0.0/src/* /Users/walker/Sites/metacatui/ ``` #### Step 5. Start Apache - Start (or restart) Apache: ```bash sudo apachectl start ``` - Open a web browser and navigate to `metacatui.localhost/metacatui` and your MetacatUI application should be ready to go!