Fix .htaccess configuration to actually work

The `.htaccess` rules should not have the starting slash otherwise they
will never get matched. When running the mod_rewrite in .htaccess, the
path is already sanitized and leading slashes stripped.

Document also that this is not the case when the rules are used directly
from the main apache2 configuration the leading slash is present always,
which led to some edit wars of this documentation in the past as it was
not well explained (#8093, #3811).

This matches the code shipped with the .htaccess in the nextcloud server:
https://github.com/nextcloud/server/blob/master/.htaccess

Signed-off-by: Jakub Jelen <jakuje@gmail.com>
This commit is contained in:
Jakub Jelen
2023-06-10 13:52:39 +02:00
committed by Jakub Jelen
parent 9f0a68327f
commit cbe2b80dc8

View File

@@ -260,14 +260,24 @@ document root of your Web server and add the following lines::
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^/\.well-known/carddav /nextcloud/remote.php/dav [R=301,L]
RewriteRule ^/\.well-known/caldav /nextcloud/remote.php/dav [R=301,L]
RewriteRule ^/\.well-known/webfinger /nextcloud/index.php/.well-known/webfinger [R=301,L]
RewriteRule ^/\.well-known/nodeinfo /nextcloud/index.php/.well-known/nodeinfo [R=301,L]
RewriteRule ^\.well-known/carddav /nextcloud/remote.php/dav [R=301,L]
RewriteRule ^\.well-known/caldav /nextcloud/remote.php/dav [R=301,L]
RewriteRule ^\.well-known/webfinger /nextcloud/index.php/.well-known/webfinger [R=301,L]
RewriteRule ^\.well-known/nodeinfo /nextcloud/index.php/.well-known/nodeinfo [R=301,L]
</IfModule>
Make sure to change /nextcloud to the actual subfolder your Nextcloud instance is running in.
.. note:: Note, that if you are putting the above configureation directly to
the apache configuration (generaly in ``/etc/apache2/sites-enabled/``),
you will need to prepend the first argument of each of the above
``RewriteRule`` option with a forward slash ``/``, for example
``^/\.well-known/carddav``.
This is because Apache already normalizes the values for the use in
``.htaccess`` by dropping any number of leading slashes, but it does
not for the use in its main site configuration where the forward slash
is still present.
If you are running NGINX, make sure ``location = /.well-known/carddav {`` and ``location = /.well-known/caldav {`` are properly configured as described in :doc:`../installation/nginx`, adapt to use a subfolder if necessary.
Now change the URL in the client settings to just use: