----- On Dec 17, 2020, at 5:19 PM, Daniel Ferradal dferra...@apache.org wrote:
> Hey Bernd,
>
> I remember my first head scratches with regex, they can be so
> confusing and difficult to understand.
>
> Although I remember preciously the day https://regexone.com/ opened my
> eyes. It just took me 45 minutes to understand the basics of it.
>
> I dearly recommend you to do the same and visit the site, once you
> grasp it, regex will be tones of times easier to deal with.
>
> Cheers
>
Hi Daniel,
my problems are more the understanding of RewriteRule in vhost- or
per-directory context.
I try to understand how rewriting works in a up-to-date Nextcloud.
This is the scenario:
root@nc-mcd:~# ll /var/www/nextcloud
total 116
drwxr-x--- 1 www-data www-data 396 Dec 9 20:33 ./
drwxr-xr-x 1 root root 90 Dec 14 19:01 ../
drwxr-x--- 1 www-data www-data 778 Dec 9 20:33 3rdparty/
drwxr-x--- 1 www-data www-data 1154 Dec 14 22:20 apps/
-rw-r----- 1 www-data www-data 17234 Dec 9 20:30 AUTHORS
drwxr-x--- 1 www-data www-data 72 Dec 14 19:08 config/
-rw-r----- 1 www-data www-data 3893 Dec 9 20:30 console.php
-rw-r----- 1 www-data www-data 34520 Dec 9 20:30 COPYING
drwxr-x--- 1 www-data www-data 458 Dec 9 20:33 core/
-rw-r----- 1 www-data www-data 5083 Dec 9 20:30 cron.php
-rw-r----- 1 www-data www-data 4450 Dec 14 19:08 .htaccess <======
-rw-r----- 1 www-data www-data 156 Dec 9 20:30 index.html
-rw-r----- 1 www-data www-data 2960 Dec 9 20:30 index.php
drwxr-x--- 1 www-data www-data 126 Dec 9 20:30 lib/
-rw-r----- 1 www-data www-data 283 Dec 9 20:30 occ
drwxr-x--- 1 www-data www-data 18 Dec 9 20:30 ocm-provider/
drwxr-x--- 1 www-data www-data 50 Dec 9 20:30 ocs/
drwxr-x--- 1 www-data www-data 18 Dec 9 20:30 ocs-provider/
-rw-r----- 1 www-data www-data 3102 Dec 9 20:30 public.php
-rw-r----- 1 www-data www-data 5332 Dec 9 20:30 remote.php
drwxr-x--- 1 www-data www-data 158 Dec 9 20:30 resources/
-rw-r----- 1 www-data www-data 26 Dec 9 20:30 robots.txt
-rw-r----- 1 www-data www-data 2379 Dec 9 20:30 status.php
drwxr-x--- 1 www-data www-data 26 Dec 9 20:30 themes/
drwxr-x--- 1 www-data www-data 42 Dec 9 20:31 updater/
-rw-r----- 1 www-data www-data 101 Dec 9 20:30 .user.ini
-rw-r----- 1 www-data www-data 362 Dec 9 20:33 version.php
There is a .htaccess in the folder.
So per-directory context. Now from the official apache documentation:
What is matched ?
...
"In per-directory context (Directory and .htaccess), the Pattern is matched
against only a partial path, for example a request of "/app1/index.html" may
result in comparison against "app1/index.html" or "index.html" depending on
where the RewriteRule is defined.
The directory path where the rule is defined is stripped from the currently
mapped filesystem path before comparison (up to and including a trailing
slash)."
So in this case this would mean, as the .htaccess file is in
/var/www/nextcloud/, this path (/var/www/nextcloud/) is stripped before
comparing.
"The net result of this per-directory prefix stripping is that rules in this
context only match against =====> the portion of the currently mapped
FILESYSTEM PATH "below" <======= where the rule is defined.
I understand it that way that a request of /somepath/somefile, which mapps
maybe via an alias to /var/www/nextcloud/ looks now IN THE FILESYSTEM for
somepath/somefile below /var/www/nextcloud/
That's my understanding and afters hours of fighting with rewrite i was happy
and proud to get it. But ...
Here are the some rewriterules from that .htaccess:
RewriteRule ^\.well-known/host-meta /public.php?service=host-meta [QSA,L]
RewriteRule ^\.well-known/host-meta\.json /public.php?service=host-meta-json
[QSA,L]
RewriteRule ^\.well-known/webfinger /public.php?service=webfinger [QSA,L]
RewriteRule ^\.well-known/nodeinfo /public.php?service=nodeinfo [QSA,L]
RewriteRule ^\.well-known/carddav /remote.php/dav/ [R=301,L]
RewriteRule ^\.well-known/caldav /remote.php/dav/ [R=301,L]
RewriteRule ^remote/(.*) remote.php [QSA,L]
RewriteRule ^(?:build|tests|config|lib|3rdparty|templates)/.* - [R=404,L]
RewriteCond %{REQUEST_URI} !^/\.well-known/(acme-challenge|pki-validation)/.*
RewriteRule ^(?:\.|autotest|occ|issue|indie|db_|console).* - [R=404,L]
Let's take the first rule:
RewriteRule ^\.well-known/host-meta /public.php?service=host-meta [QSA,L]
Following my assumption (the rule is defined in a .htaccess in
/var/www/nextcloud, so /var/www/nextcloud/ is stripped), the pattern
'^\.well-known/host-meta' is matched again the filesystem "below" the .htaccess.
But there is no folder ".well-known.
And the other rules: there are no folders remote/, no folder or file named
build, tests, config, lib, ...
Then all these rules wouldn't make sense !?!
I thought i got it, but now i'm completely stunned.
Can someone bring light into it ? Is my understanding wrong, that in
per-directory context the pattern is matched against the fs ? Although the doc
says it ?
Thanks.
Bernd
Helmholtz Zentrum München
Helmholtz Zentrum Muenchen
Deutsches Forschungszentrum fuer Gesundheit und Umwelt (GmbH)
Ingolstaedter Landstr. 1
85764 Neuherberg
www.helmholtz-muenchen.de
Aufsichtsratsvorsitzende: MinDir.in Prof. Dr. Veronika von Messling
Geschaeftsfuehrung: Prof. Dr. med. Dr. h.c. Matthias Tschoep, Kerstin Guenther
Registergericht: Amtsgericht Muenchen HRB 6466
USt-IdNr: DE 129521671
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@httpd.apache.org
For additional commands, e-mail: users-h...@httpd.apache.org