This page contains URL rewrite rules for some Content Management Systems, wiki's, webmail and other webprograms.
Use the following configuration for your Banshee websites:
UrlToolkit { ToolkitID = banshee RequestURI isfile Return Match ^/(css|files|fonts|images|js)(/|$) Return Match ^/(favicon.ico|robots.txt)$ Return Match [^?]*(\?.*)? Rewrite /index.php$1 }
Use the following configuration for your Bludit CMS websites:
UrlToolkit { ToolkitID = bludit RequestURI exists Return Match [^?]*(\?.*)? Rewrite /index.php$1 }
Use the following configuration for your Bolt websites:
UrlToolkit { ToolkitID = bolt Match \.(twig|yml)($|\?) DenyAccess RequestURI exists Return Match .* Rewrite /index.php }
Use the following configuration for your CakePHP websites:
UrlToolkit { ToolkitID = cakephp RequestURI exists Return Match .* Rewrite /index.php }
Use the following configuration for your CodeIgniter websites:
UrlToolkit { ToolkitID = codeigniter RequestURI exists Return Match ^/(index\.php|images|robots\.txt) Return Match .* Rewrite /index.php }
Use the following configuration for your Concrete5 websites:
UrlToolkit { ToolkitID = concrete5 RequestURI exists Return Match ^/index.php Return Match ^/(.*)\?(.*) Rewrite /index.php/$1&$2 Match ^/(.*) Rewrite /index.php/$1 }
Use the following configuration for your Contao websites:
UrlToolkit { ToolkitID = contao RequestURI exists Return Match /contao/(.*)\?(.*) Rewrite /contao/index.php?id=$1&$2 Match /contao/(.*) Rewrite /contao/index.php?id=$1 }
Use the following configuration for your CraftCMS websites:
UrlToolkit { ToolkitID = craftcms RequestURI exists Return Match ^/(.*)\?(.*) Rewrite /index.php?p=$1&$2 Match ^/(.*) Rewrite /index.php?p=$1 }
Use the following configuration for your DokuWiki websites:
UrlToolkit { ToolkitID = dokuwiki Match ^/(bin|conf|data|inc)/ DenyAccess Match ^/_media/(.*)\?(.*) Rewrite /lib/exe/fetch.php?media=$1&2 Match ^/_media/(.*) Rewrite /lib/exe/fetch.php?media=$1 Match ^/_detail/(.*)\?(.*) Rewrite /lib/exe/detail.php?media=$1&$2 Match ^/_detail/(.*) Rewrite /lib/exe/detail.php?media=$1 Match ^/_export/([^/]+)/(.*) Rewrite /doku.php?do=export_$1&id=$2 Match ^/$ Rewrite /doku.php RequestURI exists Return Match /(.*)\?(.*) Rewrite /doku.php?id=$1&$2 Match /(.*) Rewrite /doku.php?id=$1 }
Use the following configuration for your Drupal websites:
UrlToolkit { ToolkitID = drupal RequestURI isfile Return Match ^/favicon.ico$ Return Match /(.*)\?(.*) Rewrite /index.php?q=$1&$2 Match /(.*) Rewrite /index.php?q=$1 }
Use the following configuration for your GetSimple websites:
UrlToolkit { ToolkitID = getsimple Match ^/(data/uploads|data/thumbs)/ Skip 1 Match ^/(data|plugins|backups)/ DenyAccess RequestURI exists Return Match ^(.*)*/([A-Za-z0-9\-]+)/?$ Rewrite /index.php?id=$2 }
Use the following configuration for your Git HTTP backend websites:
CGIextension = cgi VirtualHost { ... ExecuteCGI = yes NoExtensionAs = cgi EnablePathInfo = yes ScriptAlias = /git:/usr/libexec/git-core/git-http-backend Setenv GIT_PROJECT_ROOT = /var/www/git Setenv GIT_HTTP_EXPORT_ALL = }
Use the following configuration for your Grav websites:
UrlToolkit { ToolkitID = grav Match base64_encode[^(]*\([^)]*\) DenyAccess Match (<|%3C)([^s]*s)+cript.*(>|%3E) DenyAccess Match GLOBALS(=|\[|\%[0-9A-Z]{0,2}) DenyAccess Match _REQUEST(=|\[|\%[0-9A-Z]{0,2}) DenyAccess Match ^/(.git|cache|bin|logs|backup|webserver-configs)/(.*) DenyAccess Match ^/(system|vendor)/(.*)\.(txt|xml|md|html|yaml|php|pl|py|cgi|twig|sh|bat)$ DenyAccess Match ^/(user)/(.*)\.(txt|md|yaml|php|pl|py|cgi|twig|sh|bat)$ DenyAccess Match \.md$ DenyAccess Match ^/(LICENSE.txt|composer.lock|composer.json|\.htaccess)$ DenyAccess Match ^/(favicon.ico|robots.txt)$ Return RequestURI exists Return Match .* Rewrite /index.php }
Use the following configuration for your h5ai websites:
UrlToolkit { ToolkitID = h5ai RequestURI isfile Return Match .* Rewrite /_h5ai/public/index.php }
Use the following configuration for your Habari websites:
UrlToolkit { ToolkitID = habari Match ^/(system/(classes|locale|schema|$)) Rewrite /index.php RequestURI exists Return Match [^?]*(\?.*)? Rewrite /index.php$1 }
Use the following configuration for your jCore websites:
UrlToolkit { ToolkitID = jcore RequestURI exists Return Match /(.*)\?(.*) Rewrite /index.php?path=$1&$2 Match /(.*) Rewrite /index.php?path=$1 }
Use the following configuration for your Joomla! websites:
UrlToolkit { ToolkitID = joomla Match base64_encode[^(]*\([^)]*\) DenyAccess Match (<|%3C)([^s]*s)+cript.*(>|%3E) DenyAccess Match GLOBALS(=|\[|\%[0-9A-Z]{0,2}) DenyAccess Match _REQUEST(=|\[|\%[0-9A-Z]{0,2}) DenyAccess Match ^/index\.php Return RequestURI exists Return Match .* Rewrite /index.php }
Also set 'HTTPAuthToCGI = yes' in the virtual host configuration.
Use the following configuration for your Kohana websites:
UrlToolkit { ToolkitID = kohana Match ^/(application|modules|system) DenyAccess RequestURI exists Return Match ^/(.*) Rewrite /index.php?kohana_uri=$1 }
Set $config['site_domain'] to '/' and $config['index_page'] to ''.
Use the following configuration for your Laravel websites:
UrlToolkit { ToolkitID = laravel RequestURI exists Return Match [^?]*(\?.*)? Rewrite /index.php$1 }
Use the following configuration for your MediaWiki websites:
UrlToolkit { ToolkitID = mediawiki RequestURI exists Return Match /wiki/(.*) Rewrite /index.php?title=$1 } VirtualHost { ... TriggerOnCGIstatus = false UseToolkit = mediawiki }
Set $wgArticlePath to "/wiki/$1" in LocalSettings.php. If you often see white pages, set $wgEnableParserCache and $wgCachePages to false. Yes, this is due to a bug in MediaWiki's caching routines.
Use the following configuration for your MODx websites:
UrlToolkit { ToolkitID = modx RequestURI exists Return Match ^/(.*)$ Rewrite /index.php?q=$1 }
Use the following configuration for your Nibbleblog websites:
UrlToolkit { ToolkitID = nibbleblog Match ^/admin$ Rewrite /admin.php?controller=user&action=login Match ^/category/([^/]+)/page-([0-9]+)$ Rewrite /index.php?controller=blog&action=view&category=$1&number=$2 Match ^/category/([^/]+)/$ Rewrite /index.php?controller=blog&action=view&category=$1&number=0 Match ^/tag/([^/]+)/page-([0-9]+)$ Rewrite /index.php?controller=blog&action=view&tag=$1&number=$2 Match ^/tag/([^/]+)/$ Rewrite /index.php?controller=blog&action=view&tag=$1&number=0 Match ^/page-([0-9]+)$ Rewrite /index.php?controller=blog&action=view&number=$1 Match ^/post/([^/]+)/$ Rewrite /index.php?controller=post&action=view&post=$1 Match ^/post-([0-9]+)/(.*)$ Rewrite /index.php?controller=post&action=view&id_post=$1 Match ^/page/([^/]+)/$ Rewrite /index.php?controller=page&action=view&page=$1 Match ^/feed/$ Rewrite /feed.php Match ^/([^/]+)/$ Rewrite /index.php?controller=page&action=$1 }
Use the following configuration for your October websites:
UrlToolkit { ToolkitID = october Match /themes/.*/(layouts|pages|partials)/.*.htm Rewrite /index.php Match /uploads/protected/.* Rewrite /index.php RequestURI file Return Match .* Rewrite /index.php }
Use the following configuration for your OpenCart websites:
UrlToolkit { ToolkitID = opencart Match ^/sitemap.xml$ Rewrite /index.php?route=feed/google_sitemap Match ^/googlebase.xml$ Rewrite /index.php?route=feed/google_base Match ^/system/download/.* Rewrite /index.php?route=error/not_found RequestURI exists Return Match \.(ico|gif|jpg|jpeg|png|js|css) Return Match ([^?]*)(\?(.*))? Rewrite /index.php?_route_=$1&$3 }
Use the following configuration for your Phalcon websites:
UrlToolkit { ToolkitID = phalcon Match ^/public/ Skip 1 Match ^/(.*) Rewrite /public/$1 Continue RequestURI exists Return Match (.*)\?(.*) Rewrite $1&$2 Continue Match ^/public/(.*) Rewrite /public/index.php?_url=/$1 }
Use the following configuration for your phpSQLiteCMS websites:
UrlToolkit { ToolkitID = phpsqlitecms RequestURI exists Return Match ^/(.*) Rewrite /index.php?qs=$1 }
Use the following configuration for your Pico websites:
UrlToolkit { ToolkitID = picocms RequestURI isfile Return Match .* Rewrite /index.php }
Use the following configuration for your PluXml websites:
UrlToolkit { ToolkitID = pluxml Match ^/data/configuration DenyAccess RequestURI exists Return Match ^/tag/(.*)$ Rewrite /index.php?tag/$1 Match ^/categorie([A-Za-z0-9\-]+)/(.*)$ Rewrite /index.php?categorie$1/$2 Match ^/article([A-Za-z0-9\-]+)/(.*)$ Rewrite /index.php?article$1/$2 Match ^/feed/rss/(.*)$ Rewrite /feed.php?rss$1 Match ^/feed/rss$ Rewrite /feed.php?rss$1 Match ^/archives/(.*)/(.*)$ Rewrite /index.php?archives/$1/$2 Match ^/static([A-Za-z0-9\-]+)/(.*)$ Rewrite /index.php?static$1/$2 }
Use the following configuration for your ProcessWire websites:
UrlToolkit { ToolkitID = processwire Match /site/assets/(cache|logs|backups|sessions|config|install|tmp)($|/.*$|\?) DenyAccess Match /site/assets.*/-.+/.* DenyAccess Match /(wire|site)/(config|index\.config|config-dev)\.php($|\?) DenyAccess Match /(wire|site)/templates-admin($|/|/.*\.(php|html?|tpl|inc))($|\?) DenyAccess Match /site/templates($|/|/.*\.(php|html?|tpl|inc))($|\?) DenyAccess Match /site/assets($|/|/.*\.php)($|\?) DenyAccess Match /wire/(core|modules)/.*\.(php|inc|tpl|module|info\.json)($|\?) DenyAccess Match /site/modules/.*\.(php|inc|tpl|module|info\.json)($|\?) DenyAccess RequestURI exists Return Match ^/(.*\/?)?\?(.*)$ Rewrite /index.php?it=$1&$2 Match ^/(.*)$ Rewrite /index.php?it=$1 }
Use the following configuration for your Pydio websites:
UrlToolkit { ToolkitID = pydio Match ^/data DenyAccess RequestURI exists Return Match ^/shares Rewrite /dav.php Match ^/api Rewrite /rest.php Match ^/user Rewrite /index.php?get_action=user_access_point }
During the installation process, you need to set MaxUrlLength = 3000.
Use the following configuration for your RoundCube websites:
UrlToolkit { ToolkitID = roundcube Match ^/favicon.ico$ Rewrite /skins/larry/images/favicon.ico Match ^/(bin|config|logs|plugins/enigma/home|temp) DenyAccess }
Use the following configuration for your SilverStripe websites:
UrlToolkit { ToolkitID = silverstripe RequestURI isfile Return Match (.*)\?(.*) Rewrite $1&$2 Continue Match ^/(.*) Rewrite /sapphire/main.php?url=$1 } VirtualHost { ... TriggerOnCGIstatus = no UseToolkit = silverstripe }
Use the following configuration for your Symfony2 websites:
UrlToolkit{ ToolkitID = Symfony2 RequestURI isfile Return Match .* Rewrite /app.php }
Use the following configuration for your Symphony websites:
UrlToolkit { ToolkitID = symphony Match ^/manifest/.* DenyAccess Match ^/workspace/utilities/.*\.xsl($|\?) DenyAccess Match ^/workspace/pages/.*\.xsl($|\?) DenyAccess Match ^/.*\.sql($|\?) DenyAccess Match ^/favicon.ico$ Return Match ^/image\/(.+\.(jpg|gif|jpeg|png|bmp))$ Rewrite /extensions/jit_image_manipulation/lib/image.php?param=$1 Match ^/symphony\/?$ Rewrite /index.php?mode=administration RequestURI exists Return Match ^/(.*)\?(.*) Rewrite /$1&$2 Continue Match ^/symphony(\/(.*\/?))?$ Rewrite /index.php?symphony-page=$1&mode=administration Match ^/(.*\/?)$ Rewrite /index.php?symphony-page=$1 }
Use the following configuration for your Taskboard websites:
UrlToolkit { ToolkitID = taskboard Match ^/api/(.*) Rewrite /api/api.php }
Use the following configuration for your Textpattern CMS websites:
UrlToolkit { ToolkitID = textpattern RequestURI exists Return Match ^/(files|images|js|res)(/|$) Return Match ^/(favicon.ico|robots.txt|sitemap.xml)$ Return Match [^?]*(\?.*)? Rewrite /index.php$1 }
Use the following configuration for your TYPO3 websites:
UrlToolkit { ToolkitID = typo3 RequestURI exists Return Match .* Rewrite /index.php }
Use the following configuration for your WolfCMS websites:
UrlToolkit { ToolkitID = wolfcms Match ^/site/install/index.html$ Rewrite /site/install/index.php?rewrite=1 Match ^/site/install/index.php$ Rewrite /site/install/index.php?rewrite=1 Match ^/site/install/$ Rewrite /site/install/index.php?rewrite=1 RequestURI exists Return Match ^/site/admin(.*)$ Rewrite /site/admin/index.php?$1 Match ^/site(.*)$ Rewrite /site/index.php?WOLFPAGE=$1 }
The 3 match rules above RequestURI are for clean URL installation. They should be removed after installation.
Use the following configuration for your WordPress websites:
UrlToolkit { ToolkitID = wordpress RequestURI exists Return Match [^?]*(\?.*)? Rewrite /index.php$1 }
UrlToolkit { ToolkitID = wp-multi-subdir Match ^/index\.php$ Return Match ^/([_0-9a-zA-Z-]+/)?wp-admin$ Redirect /$1wp-admin/ RequestURI exists Return Match ^/([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) Rewrite /$2 Match ^/([_0-9a-zA-Z-]+/)?(.*\.php)$ Rewrite /$2 Match ^/[_0-9a-zA-Z-]+(/wp-.*) Rewrite /$1 # if not present 404 - error is displayed Match .* Rewrite /index.php }
For a complete instruction about how to use Wordpress with Hiawatha, read Hosting WordPress with Hiawatha by Chris Wadge.
Use the following configuration for your Xenforo websites:
UrlToolkit { ToolkitID = xenforo RequestURI exists Return Match [^?]*(\?.*)? Rewrite /index.php$1 }
Use the following configuration for your Yii websites:
UrlToolkit { ToolkitID = yii RequestURI exists Return Match .* Rewrite /index.php }
Use the following configuration for your Zend websites:
UrlToolkit { ToolkitID = zend Match ^/.*\.(js|ico|gif|jpg|jpeg|png|css|svg)(/|$) Return Match .* Rewrite /index.php } VirtualHost { ... WebsiteRoot = /path/to/website/public UseToolkit = zend # Required so that Zend can find the application root directory Setenv APPLICATION_PATH = /path/to/website # Optional, for more verbose error messsages Setenv APPLICATION_ENV = development }