You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@httpd.apache.org by Daniel Betz <db...@df.eu> on 2016/05/03 16:17:14 UTC

[users@httpd] Problem with mod_rewrite, especially with ap_context_document_root() in apache 2.4.20

Hello List,

i dont know if im right here, or that i should file a bugreport, but i will post my problem here first.


I have an easy rewrite Rule, which rewrites everything to /index.php, when the filename or directory doesnt exist.

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]


Sometimes and really random i become an bad request error 400 back.
After debugging a litte bit i found, that there were changes made with the "context docroot"

Here are the rewrite logs from an failed and from an working request:
FAILED:
rewrite '2014/tree/' -> '/index.php'
trying to replace prefix /www/471639_96450/gn2-hosting.de/host260161/host260155/danielbaer.eu/ with /
trying to replace context docroot  with context prefix
internal redirect with index.php [INTERNAL REDIRECT]

WORKING:
rewrite '2014/tree/' -> '/index.php'
trying to replace prefix /www/471639_96450/gn2-hosting.de/host260161/host260155/danielbaer.eu/ with /
trying to replace context docroot \xa0/\xde\v\xd8/\xde\v\x901\xde\v with context prefix
internal redirect with /index.php [INTERNAL REDIRECT]


It doesnt work, when when ap_context_document_root(r) is empty, but not NULL.
Sometimes it gives me strange docroot folders back like \xa0/\xde\v\xd8/\xde\v\x901\xde\v

In 2.4.19 ( i think ) a new option in mod_rewrite was added and i think there could be an error there:
            /* No base URL, or r->filename wasn't still under dconf->directory
             * or, r->filename wasn't still under the document root.
             * If there's a context document root AND a context prefix, and
             * the context document root is a prefix of r->filename, replace.
             * This allows a relative substitution on a path found by mod_userdir
             * or mod_alias without baking in a RewriteBase.
             */
            if (tmpfilename == r->filename &&
                !(dconf->options & OPTION_IGNORE_CONTEXT_INFO)) {
                if ((ccp = ap_context_document_root(r)) != NULL) {
                    const char *prefix = ap_context_prefix(r);
                    if (prefix != NULL) {
                        rewritelog((r, 2, dconf->directory, "trying to replace "
                                    "context docroot %s with context prefix %s",
                                    ccp, prefix));
                        r->filename = subst_prefix_path(r, r->filename,
                                ccp, prefix);
                    }
                }
            }

After adding "RewriteOptions IgnoreContextInfo" the random errors are gone.

So then. The question is: Bug or Feature and should i file this bug somewhere ?

Greetings,
Daniel

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


Re: [users@httpd] Problem with mod_rewrite, especially with ap_context_document_root() in apache 2.4.20

Posted by Eric Covener <co...@gmail.com>.
On Tue, May 3, 2016 at 10:33 AM, Eric Covener <co...@gmail.com> wrote:
> I assume this stuff is in your documentroot, no VirtualDocumentRoot or
> Alias used.    How frequently does it fail?    Any chance it requires
> mod_http2?

(nor mod_userdir?)

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


AW: [users@httpd] Problem with mod_rewrite, especially with ap_context_document_root() in apache 2.4.20

Posted by Daniel Betz <db...@df.eu>.
Hello,

i have sent you an mail with the tarball.

thank you for your help.

Daniel


> -----Ursprüngliche Nachricht-----
> Von: Eric Covener [mailto:covener@gmail.com]
> Gesendet: Mittwoch, 4. Mai 2016 14:26
> An: users@httpd.apache.org
> Betreff: Re: [users@httpd] Problem with mod_rewrite, especially with
> ap_context_document_root() in apache 2.4.20
> 
> On Wed, May 4, 2016 at 1:24 AM, Daniel Betz <db...@df.eu> wrote:
> > Heres the relevant part of my httpd.conf. mod_http2 isnt enabled, but
> > i can give it an try
> 
> 
> No need to give it a try. I thought it might explain why you had errors a few
> releases after where this change was introduced as it came along later.
> 
> Can you share your vhost_ldap changes, or complete tarball, privately?
> 
> --
> Eric Covener
> covener@gmail.com
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
> For additional commands, e-mail: users-help@httpd.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org

Re: [users@httpd] Problem with mod_rewrite, especially with ap_context_document_root() in apache 2.4.20

Posted by Eric Covener <co...@gmail.com>.
On Wed, May 4, 2016 at 1:24 AM, Daniel Betz <db...@df.eu> wrote:
> Heres the relevant part of my httpd.conf. mod_http2 isnt enabled, but i can give it an try


No need to give it a try. I thought it might explain why you had
errors a few releases after where this change was introduced as it
came along later.

Can you share your vhost_ldap changes, or complete tarball, privately?

-- 
Eric Covener
covener@gmail.com

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


AW: [users@httpd] Problem with mod_rewrite, especially with ap_context_document_root() in apache 2.4.20

Posted by Daniel Betz <db...@df.eu>.
> On Tue, May 3, 2016 at 10:17 AM, Daniel Betz <db...@df.eu> wrote:
> > Hello List,
> >
> > i dont know if im right here, or that i should file a bugreport, but i will post
> my problem here first.
> >
> >
> > I have an easy rewrite Rule, which rewrites everything to /index.php, when
> the filename or directory doesnt exist.
> >
> > RewriteEngine On
> > RewriteBase /
> > RewriteRule ^index\.php$ - [L]
> > RewriteCond %{REQUEST_FILENAME} !-f
> > RewriteCond %{REQUEST_FILENAME} !-d
> > RewriteRule . /index.php [L]
> >
> >
> > Sometimes and really random i become an bad request error 400 back.
> > After debugging a litte bit i found, that there were changes made with the
> "context docroot"
> >
> > Here are the rewrite logs from an failed and from an working request:
> > FAILED:
> > rewrite '2014/tree/' -> '/index.php'
> > trying to replace prefix
> > /www/471639_96450/gn2-
> hosting.de/host260161/host260155/danielbaer.eu/
> > with / trying to replace context docroot  with context prefix internal
> > redirect with index.php [INTERNAL REDIRECT]
> >
> > WORKING:
> > rewrite '2014/tree/' -> '/index.php'
> > trying to replace prefix
> > /www/471639_96450/gn2-
> hosting.de/host260161/host260155/danielbaer.eu/
> > with / trying to replace context docroot
> > \xa0/\xde\v\xd8/\xde\v\x901\xde\v with context prefix internal
> > redirect with /index.php [INTERNAL REDIRECT]
> >
> >
> > It doesnt work, when when ap_context_document_root(r) is empty, but
> not NULL.
> > Sometimes it gives me strange docroot folders back like
> > \xa0/\xde\v\xd8/\xde\v\x901\xde\v
> >
> > In 2.4.19 ( i think ) a new option in mod_rewrite was added and i think
> there could be an error there:
> >             /* No base URL, or r->filename wasn't still under dconf->directory
> >              * or, r->filename wasn't still under the document root.
> >              * If there's a context document root AND a context prefix, and
> >              * the context document root is a prefix of r->filename, replace.
> >              * This allows a relative substitution on a path found by mod_userdir
> >              * or mod_alias without baking in a RewriteBase.
> >              */
> >             if (tmpfilename == r->filename &&
> >                 !(dconf->options & OPTION_IGNORE_CONTEXT_INFO)) {
> >                 if ((ccp = ap_context_document_root(r)) != NULL) {
> >                     const char *prefix = ap_context_prefix(r);
> >                     if (prefix != NULL) {
> >                         rewritelog((r, 2, dconf->directory, "trying to replace "
> >                                     "context docroot %s with context prefix %s",
> >                                     ccp, prefix));
> >                         r->filename = subst_prefix_path(r, r->filename,
> >                                 ccp, prefix);
> >                     }
> >                 }
> >             }
> >
> > After adding "RewriteOptions IgnoreContextInfo" the random errors are
> gone.
> >
> > So then. The question is: Bug or Feature and should i file this bug
> somewhere ?
> >
> 
> Bug, but the feature has been in 2.4.x since 2.4.16.  I will take a look at the
> report today.
> 
> I assume this stuff is in your documentroot, no VirtualDocumentRoot or
> Alias used.    How frequently does it fail?    Any chance it requires
> mod_http2?
> 

The setup is a little bit "special". I have an modified mod_vhost_ldap and mod_fastcgi.
The Documentroot, SuexecUserGroup, PHP Version, etc. comes from mod_vhost_ldap
and switches the FastCGI Socket for every domain and php version in the VirtualHost.

Yesterday it failed in an bad request about 240 times from 150.000 requests.
Not often, but often enough, so that our customers cry :)

Heres the relevant part of my httpd.conf. mod_http2 isnt enabled, but i can give it an try

<IfDefine FCGI>
  LoadModule fastcgi_module     mod_fastcgi.so
  LoadModule vhost_ldap_module  mod_vhost_ldap.so

  LDAPSharedCacheSize 2000000
  LDAPCacheEntries 4096
  LDAPCacheTTL 5
  LDAPOpCacheEntries 4096
  LDAPOpCacheTTL 5

  FastCgiExternalServer /etc/httpd/fastcgi/php-fcgi-starter -flush -socket /etc/httpd/fastcgi/php5-53LATEST -idle-timeout 3600
  Action php-fastcgi /php/php-fcgi-starter


</IfDefine>

<VirtualHost 134.119.246.117:80>
  ServerName m32s4-1-4db.domainfactory.de
  SuexecUserGroup domcgi nobody
  DocumentRoot /kunden/shadow/htdocs/

   ScriptAlias /php/ /etc/httpd/fastcgi/

    VhostLDAPEnabled on
    VhostLDAPUrl "ldap://localhost/sid=2542,sec=hosting,o=xxxxx,c=de"
    VhostLdapBindDN "cn=readonly,sid=2542,sec=hosting,o=xxxx,c=de"
    VhostLDAPBindPassword "noone"
  </IfDefine>


</virtualhost>








Re: [users@httpd] Problem with mod_rewrite, especially with ap_context_document_root() in apache 2.4.20

Posted by Eric Covener <co...@gmail.com>.
On Tue, May 3, 2016 at 10:17 AM, Daniel Betz <db...@df.eu> wrote:
> Hello List,
>
> i dont know if im right here, or that i should file a bugreport, but i will post my problem here first.
>
>
> I have an easy rewrite Rule, which rewrites everything to /index.php, when the filename or directory doesnt exist.
>
> RewriteEngine On
> RewriteBase /
> RewriteRule ^index\.php$ - [L]
> RewriteCond %{REQUEST_FILENAME} !-f
> RewriteCond %{REQUEST_FILENAME} !-d
> RewriteRule . /index.php [L]
>
>
> Sometimes and really random i become an bad request error 400 back.
> After debugging a litte bit i found, that there were changes made with the "context docroot"
>
> Here are the rewrite logs from an failed and from an working request:
> FAILED:
> rewrite '2014/tree/' -> '/index.php'
> trying to replace prefix /www/471639_96450/gn2-hosting.de/host260161/host260155/danielbaer.eu/ with /
> trying to replace context docroot  with context prefix
> internal redirect with index.php [INTERNAL REDIRECT]
>
> WORKING:
> rewrite '2014/tree/' -> '/index.php'
> trying to replace prefix /www/471639_96450/gn2-hosting.de/host260161/host260155/danielbaer.eu/ with /
> trying to replace context docroot \xa0/\xde\v\xd8/\xde\v\x901\xde\v with context prefix
> internal redirect with /index.php [INTERNAL REDIRECT]
>
>
> It doesnt work, when when ap_context_document_root(r) is empty, but not NULL.
> Sometimes it gives me strange docroot folders back like \xa0/\xde\v\xd8/\xde\v\x901\xde\v
>
> In 2.4.19 ( i think ) a new option in mod_rewrite was added and i think there could be an error there:
>             /* No base URL, or r->filename wasn't still under dconf->directory
>              * or, r->filename wasn't still under the document root.
>              * If there's a context document root AND a context prefix, and
>              * the context document root is a prefix of r->filename, replace.
>              * This allows a relative substitution on a path found by mod_userdir
>              * or mod_alias without baking in a RewriteBase.
>              */
>             if (tmpfilename == r->filename &&
>                 !(dconf->options & OPTION_IGNORE_CONTEXT_INFO)) {
>                 if ((ccp = ap_context_document_root(r)) != NULL) {
>                     const char *prefix = ap_context_prefix(r);
>                     if (prefix != NULL) {
>                         rewritelog((r, 2, dconf->directory, "trying to replace "
>                                     "context docroot %s with context prefix %s",
>                                     ccp, prefix));
>                         r->filename = subst_prefix_path(r, r->filename,
>                                 ccp, prefix);
>                     }
>                 }
>             }
>
> After adding "RewriteOptions IgnoreContextInfo" the random errors are gone.
>
> So then. The question is: Bug or Feature and should i file this bug somewhere ?
>

Bug, but the feature has been in 2.4.x since 2.4.16.  I will take a
look at the report today.

I assume this stuff is in your documentroot, no VirtualDocumentRoot or
Alias used.    How frequently does it fail?    Any chance it requires
mod_http2?

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org