Version 2.4 of Abyss and later offers native URL rewriting support, so using tricks with 404 pages as outlined on this page is no longer necessary. Here's a better way to do it.

  1. Log in to the Web Server Console at http://localhost:9999/ .
  2. Click the "Configure" button next to the relative host in the list.
  3. Click on the "URL Rewriting" icon.
  4. The "URL Rewriting Rules" list will probably be blank. Click the "Add" button at the bottom to add a new rule.
  5. Our first rule is going to tell Abyss to not rewrite paths that are comprised of just a slash, or which contain a dot in them. (Or, more correctly, to rewrite them in exactly the way it found them.) The former are going to be requests for your home page, and the latter are most likely going to be requests for files which we don't want to pass through Drupal, like images, JavaScript files, etc. In the "Virtual Path Regular Expression" field, enter this:
    (^/$|(.*)\.(.*))
  6. Make sure that the "If this rule matches" menu is set to "Perform an internal redirection," and enter simply this in the "Redirect to" field:
    $0
  7. Check the "Append Query String" box.
  8. From the "Next Action" menu, select "Stop matching."
  9. All other check boxes should be left unchecked. Click OK.
  10. Abyss will take you back to the "URL Rewriting Rules" list, and probably give you a message that it wants to restart. Ignore it for now until we add the second rule. Click the "Add" button again.
  11. In the "Virtual Path Regular Expression" field, enter:
    ^([^\?]*)$
  12. Again, we want to "Perform an internal redirection." Put this in the "Redirect to" field:
    /index.php?q=$1
  13. Again, check the "Append Query String" checkbox, and set "Next Action" to "Stop matching." Click OK.
  14. Now, if you see the two rules you created above in the URL Rewriting Rules list, take Abyss up on its offer to restart the server.
  15. Visit your site in a web browser, log in as an administrator, open up the "Clean URLs" page in the "Site configuration" section, cross your fingers, and turn on clean URLs.

Incidentally, we've found that Abyss works quite well with Drupal when configured this way; however, it was unable to cope with the volume of traffic our site was receiving, and often responded with page load times well into the double digits. I would not recommend using Abyss for anything but the most lightly-trafficked Drupal installations.

Caution

There are some apparent weaknesses in the approach listed above as: ^/$|(.*)\.(.*). If we used Drupal's URL aliases feature, for example node 125 is aliased as "/mr.edmons_approach_to_the_tuna_recipe", the rewrite would fail as Abyss would be looking for a physical resource named "/mr.edmons_approach_to_the_tuna_recipe". A better approach has been described in this Abyss forum resource http://www.aprelium.com/forum/viewtopic.php?t=14948.

In addition, the approach used in that solution transforms requests like ^(.*)\?(.*)=(.*)$ into /index.php?q=$1&$2=$3 to support multi-page indexes. And then, it uses REQUEST_FILENAME Is not a directory and REQUEST_FILENAME Is not a file as conditions, making it more accurate in leaving the file and directory requests intact.

Via this approach, special cases can also be covered for Drupal installations located in subpaths.