Re: some questions to mod_rewrite

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




----- On Dec 17, 2020, at 5:19 PM, Daniel Ferradal dferradal@xxxxxxxxxx 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-unsubscribe@xxxxxxxxxxxxxxxx
For additional commands, e-mail: users-help@xxxxxxxxxxxxxxxx




[Index of Archives]     [Open SSH Users]     [Linux ACPI]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Squid]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux