Edit report at https://bugs.php.net/bug.php?id=66191&edit=1
ID: 66191
Comment by: magnusthorek at gmail dot com
Reported by: jakoch at web dot de
Summary: relative paths are not handled correctly
Status: Not a bug
Type: Bug
Package: Built-in web server
Operating System: Windows
PHP Version: 5.4.22
Block user comment: N
Private report: N
New Comment:
I can confirm this too. There is even a post of mine in Stack Overflow
(http://stackoverflow.com/questions/25095425/php-built-in-webserver-and-relative-paths) detailing a
whole scenario mainly based in relative paths that does not work as expected.
And it's not only with this application I developed. phpMyAdmin also relies on relative paths
to load their CSS and JS and the "." is being resolved as one level above, right after the
port definition, instead of the current accessed by browser.
Previous Comments:
------------------------------------------------------------------------
[2014-04-05 00:03:00] steve at steveorevo dot com
I can confirm this. Doesn't happen with Apache or Nginx, but visiting a page without the
trailing slash causes subsequent links to fail.
------------------------------------------------------------------------
[2013-11-28 18:07:13] jakoch at web dot de
Demo: https://www.dropbox.com/s/go5ikn4kvryl6e1/php-server-bug.ziphttp://localhost:90/application <-- not working
http://localhost:90/application/ <-- working
Anon, i think you might be right and an implicit redirect would solve this.
------------------------------------------------------------------------
[2013-11-28 16:31:58] anon at anon dot anon
When you browse '/application', the web browser has no way of knowing that
'application' is a directory. It looks like a file in '/'. Consequently, the
base URI is '/', so the browser requests resources relative to there. The correct path you
should be viewing from is '/application/'. Therefore, it's a web server's
responsibility, whenever a directory is requested without a trailing slash, to send a redirect so
that it does have a trailing slash. Apparently this vital redirect isn't being sent. I'm
not familiar with PHP's built-in web server so I can't say if this missing redirect is a
bug in the server or a configuration or user error.
------------------------------------------------------------------------
[2013-11-28 16:13:10] jakoch at web dot de
"Browsers interpret relative URLs relative to the current URL ..."
The current URL is "http://localhost:90/updater" not "http://localhost:90/".
On the screenshot you see, that i get a http code 200 for browsing into the subdir. Then <link
href="assets/css/bootstrap.css" rel="stylesheet"> should resolve to http://localhost:90/updater/assets/css/bootstrap.css,
but it's requested as http://localhost:90/assets/css/bootstrap.css
- logged as "/assets/css/bootstrap.css" - the file is at
/updater/assets/css/bootstrap.css.
Putting http://localhost:90/updater in front of the href
works, but thats not what i want to use, because the page is served with Nginx. And that works...
------------------------------------------------------------------------
[2013-11-28 15:40:23] johannes@php.net
These paths have to be resolved b the browser, not PHP as server. Browsers interpret relative URLs
relative to the current URL ...
------------------------------------------------------------------------
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=66191
--
Edit this bug report at https://bugs.php.net/bug.php?id=66191&edit=1