On Mon, 2009-02-16 at 20:34 +0000, Stuart wrote:
> 2009/2/16 Paul M Foster <pa...@quillandmouse.com>:
> > On Mon, Feb 16, 2009 at 07:30:57PM +0200, Thodoris wrote:
> >
> >>
> >>> I'm submitting a url like this:
> >>>
> >>> http://mysite.com/index.php/alfa/bravo/charlie/delta
> >>>
> >>> The index.php calls has code to decode the url segments
> >>> (alfa/bravo/charlie/delta). It determines that the controller is alfa,
> >>> the method is bravo, and converts charlie and delta to $_GET['charlie']
> >>> = 'delta'. It verifies that the controller and method exist, and calls
> >>> the controller and method.
> >>>
> >>> This works fine. The right controller gets called and the right method,
> >>> and the GET parameter looks like it should. The method sets some
> >>> variables and then calls a render() function to render the page, which
> >>> is in the doc root of the site.
> >>>
> >>> The page does get rendered, but without the stylesheet, and none of the
> >>> graphics show up. Why? Because, according to the logs, Apache appears to
> >>> be looking for the images and everything else in the directory
> >>> index.php/alfa/bravo/charlie/delta, which of course doesn't exist.
> >>>
> >>> No, I don't have an .htaccess file with RewriteEngine on. Apache figures
> >>> out that index.php is the file to look for in the original URL, but
> >>> can't figure out that everything else is relative to that file, not the
> >>> entire URL.
> >>>
> >>> This method is in use in at least one other MVC framework. What am I
> >>> doing wrong?
> >>>
> >>> Paul
> >>>
> >>>
> >>
> >> I assume that in order for this to work you will have to use mod_rewrite
> >> for apache to work properly. Check the framework's installation
> >> instructions to see if you configured mod_rewrite correctly for this to
> >> work properly.
> >
> > mod_rewrite isn't involved. Apache has a "lookback" feature that "looks
> > back" through the URL until it finds an actual file it can execute,
> > which in this case is index.php. Unfortunately, it appears that Apache
> > believes the directory in which linked files are found is the *whole*
> > URL.
> >
> > mod_rewrite might resolve this, but it isn't allowed on all servers. So
> > it's not a reliable solution.
> This is your problem, you're not understanding where the paths are
> being resolved. Apache has absolutely no involvement in resolving
> relative paths in your HTML files to absolute URLs. The browser does
> this. All you need to do is use absolute URLs and everything will work
> fine. By absolute, in case you don't know, I mean starting with a /
> and being "from" the document root in the web server.
> For example, if you have a tag like <a href="arse.php">arse</a> and
> arse.php is in the same directory as index.php you need to change it
> to <a href="/arse.php">arse</a>.
> Another example... if you have <a href="somedir/crack.php">crack</a>
> where crack.php is in the subdirectory somedir beneath where index.php
> is you need to change the tag to <a
> href="/somedir/crack.php">crack</a>.
> You need to apply this to all URLs in your code, including
> stylesheets, images and javascript references. This should not be a
> difficult concept to grasp, so maybe I'm not explaining it right. If
> so please explain what you understand by what I'm saying and I can
> alter it to be more helpful.
> -Stuart
> -- 
> http://stut.net/
I've read through this thread and not noticed anyone mention the <base>
tag. This allows you to specify a URL to which relative ones are mapped
to, which could be just what you're looking for, as I believe all the
browsers support it (the tag has been around for donkeys years, so I'd
be surprised if any browsers didn't support it)


PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to