Edit report at https://bugs.php.net/bug.php?id=67671&edit=1
ID: 67671
Comment by: tobias at twokings dot nl
Reported by: tobias at twokings dot nl
Summary: mod_rewrite emulation fails for paths with dots in
them
Status: Open
Type: Bug
Package: Built-in web server
Operating System: Debian GNU/Linux jessie x64
PHP Version: 5.6.0RC2
Block user comment: N
Private report: N
New Comment:
> It's not a bug.
If it's not a bug, then it is an undocumented feature that is different from the default
behavior of emulating Apache + mod_php. The built-in web server emulates RewriteRules just fine,
*except* when the HTTP path contains a dot, in which case it assumes that we want to serve a static
file. In other words, what seems to happen here is that the static file detection happens *before*
processing rewrites, while in Apache, it happens *after* (or rather, Apache resolves rewrites, then
maps the resulting request path to filesystem paths, potentially with MultiViews changing the
extension based on acceptable content types, and then determines, based on the file it finds, how to
process the result).
Note, specifically, that the built-in server *does* support RewriteRules; it parses .htaccess and
processes it correctly.
Either way, whether the request URL contains a dot is completely orthogonal to static file
detection: I may want to serve a file named README statically under
/README, and /domain-info/example.org could be a dynamic URL that I want
to process *exactly* like /domain-info/all-domains.
> If you want to force the entry point (ot emulate a RewriteRule) you need to fire up the server
> in this way
That is hardly a solution. I do not want to force an entry point for everything, the example is just
a minimum viable Rewrite configuration to demonstrate the problem. In my real-world example, this
won't work at all, because I need to rewrite more specifically, leaving some static files
actually served statically. The built-in server *does* support RewriteRule (see above), and the
problem is not with those - RewriteRules are merely a triggering circumstance, but the root problem
is that the built-in server uses a flawed mechanism to determine whether something should be served
statically or not.
Anyway; the point of the built-in web server is to test PHP scripts locally, and any undocumented
deviation from a reasonably standard Apache setup is highly undesirable for that, because if the
test server doesn't match the production system on key aspects like this one, why bother using
it at all?
Previous Comments:
------------------------------------------------------------------------
[2014-07-25 05:06:29] genesislive2007 at gmail dot com
It's not a bug.
If you want to force the entry point (ot emulate a RewriteRule) you need to fire up the server in
this way:
php -S localhost:8000 -t dir dir/index.php
------------------------------------------------------------------------
[2014-07-23 21:29:31] requinix@php.net
Still unsure how to reproduce (and my brain is completely failing to read C right now) but that code
certainly does look responsible for it.
------------------------------------------------------------------------
[2014-07-23 20:10:29] genesislive2007 at gmail dot com
tring to fix it with this PR:
https://github.com/php/php-src/pull/738
------------------------------------------------------------------------
[2014-07-23 18:25:17] requinix@php.net
Oh, and my router script is
<?php
error_log("serving {$_SERVER["REQUEST_URI"]}");
echo PHP_VERSION . ": ", $_SERVER["REQUEST_URI"], "\n";
------------------------------------------------------------------------
[2014-07-23 18:24:13] requinix@php.net
Like the other bug, this is working for me as well. Ubuntu 14.04 x64
/path/to/php560rc2/sapi/cli$ ./php -S localhost:8000 -t / router.php
PHP 5.6.0RC2 Development Server started at Wed Jul 23 11:16:15 2014
Listening on http://localhost:8000
Document root is /
Press Ctrl-C to quit.
[Wed Jul 23 11:17:24 2014] serving /asdf.foo
$ curl http://localhost:8000/asdf.foo
5.6.0RC2: /asdf.foo
I suppose the next thing to check is your configure command. Also for the heck of it, the loaded
modules and any non-default php.ini settings you may have set.
(I used vanilla ./configure with stock modules and settings)
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=67671
--
Edit this bug report at https://bugs.php.net/bug.php?id=67671&edit=1