FAQ - How do I enable pretty URLs?
How do I enable pretty URLs?
Default URLs look like: https://example.com/index.php?route=/tree/demo
.
Pretty URLs look like: https://example.com/tree/demo
.
To enable “pretty URLs”, you need two things.
Firstly, you must configure your web-server to accept pretty URLs, and forward them to webtrees. The exact configuration will be different for every server. The basic setup is:
-
Static files are kept in
/public
. These can be served directly, using long expires headers. -
Dynamic pages are generated by
index.php
. All non-static URLs should be mapped onto/index.php
. -
Other files and folders are private, and should not be made available. e.g.
/app
,/data
,/modules
,/resources
,/vendor
.
Secondly, you must tell webtrees to generate pretty URLs.
You do this by adding/changing two lines in the file data/config.ini.php
.
base_url="https://www.example.com/webtrees"
rewrite_urls="1"
After you enable pretty URLs, webtrees still recognise the default URLs. So any bookmarks and search-engine links will still work.
Recognising URLs from webtrees 1.x and phpGedView
webtrees is able to recognise the URLs generated by these older applications.
So bookmarks and search engine links to {base_url}/individual.php?pid=XXX&ged=YYY
will be automatically forwarded to {base_url}/tree/YYY/individual/XXX
.
Note that this will not work for relative URLs that you may have embedded
in HTML blocks on your home pages. e.g. <a href="individual.php">...</a>
.
You will need to edit these manually.
Example configuration for NGINX
Here is an example NGINX configuration for webtrees installed in a subfolder /webtrees/
.
# Static files have versions in their URLs, and can be cached indefinitely.
location /webtrees/public {
expires 365d;
access_log off;
}
# GIT config files can contain credentials or other sensitive data.
location /webtrees/.git {
deny all;
}
# User data is stored here by default.
location /webtrees/data {
deny all;
}
# Nothing sensitive here, but there is no need to publish it.
location /webtrees/app {
deny all;
}
location /webtrees/modules {
deny all;
}
location /webtrees/resources {
deny all;
}
location /webtrees/vendor {
deny all;
}
# Rewrite all other requests onto the webtrees front-controller.
location /webtrees/ {
rewrite ^ /webtrees/index.php last;
}
# webtrees runs from this one script.
location = /webtrees/index.php {
include fastcgi.conf;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
}
Example configuration for Apache
Does your server support .htaccess
files? To test this, try to view
your webtrees configuration file in your browser (e.g. https://<your.site.com>/data/config.ini.php
). If .htaccess
files are supported, you will get 403/Access-denied error. If not, you
will see a page containing just a semicolon.
Store the following .htaccess
file in the webtrees folder.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /webtrees/
# GIT config files can contain credentials or other sensitive data.
RewriteRule \.git - [F]
# User data is stored here by default.
RewriteRule ^data(/|$) - [F]
# Nothing sensitive here, but there is no need to publish it.
RewriteRule ^app(/|$) - [F]
RewriteRule ^modules - [F]
RewriteRule ^resources(/|$) - [F]
RewriteRule ^vendor(/|$) - [F]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Change the entry for RewriteBase
to match the folder part of your
webtrees URL.