Pretty URLs with nginx


I hope anyone can help me to get pretty URLs with nginx.
I want that my URLs look like this: (for example)
instead of this:

I found many instructions, but it wasnt helpful in my case.

I use Plesk Obsidian 18.0.30 with Ubuntu 18.04.5 and PHP 7.4.11 as FPM with nginx.

This is my additional nginx config:

rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
rewrite ^/.well-known/webfinger /public.php?service=webfinger last;
add_header Strict-Transport-Security “max-age=15768000; includeSubDomains; preload;” always;

location = /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;

location = /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;

location = /robots.txt {
allow all;
log_not_found off;
access_log off;

Enable gzip but do not remove ETag headers

gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/ application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
deny all;

location ~ ^/(?:.|autotest|occ|issue|indie|db_|console) {
deny all;

location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|oc[ms]-provider/.+).php(?:$|/) {
fastcgi_split_path_info ^(.+?.php)(/.*|)$;
fastcgi_pass “unix:///var/www/vhosts/system/”;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name =404;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_param HTTPS on;
# Avoid sending the security headers twice
fastcgi_param modHeadersAvailable true;
# Enable pretty urls
fastcgi_param front_controller_active true;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
include fastcgi_params;

location ~ ^/(?:updater|ocs-provider)(?:$|/) {
try_files $uri/ =404;
index index.php;

Adding the cache control header for js and css files

location ~ .(?:css|js|woff2?|svg|gif)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control “public, max-age=15778463”;
add_header Referrer-Policy “no-referrer” always;
add_header X-Content-Type-Options “nosniff” always;
add_header X-Download-Options “noopen” always;
add_header X-Frame-Options “SAMEORIGIN” always;
add_header X-Permitted-Cross-Domain-Policies “none” always;
add_header X-Robots-Tag “none” always;
add_header X-XSS-Protection “1; mode=block” always;

location ~ .(?:png|html|ttf|ico|jpg|jpeg)$ {
try_files $uri /index.php$request_uri;

I use the same config for another nextcloud instance with the same version of Plesk, Ubuntu and PHP…

Thank you so much for your help!

Is anyone here, who can help me in this case?

I don’t get my problem :confused:


Thank you very much for your answer!

But the .htaccess can only be used with apache, not with nginx.

Any other hints for nginx?

No need to change .htaccess
Change in config/config.php and occ-command.

I will try it - can you tell me which occ command you mean?

See github link or:


'htaccess.RewriteBase' => '/',


sudo -u www-data php /var/www/nextcloud/occ maintenance:update:htaccess
(change user/path)