Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!feeder.erje.net!eu.feeder.erje.net!newsfeed.xs4all.nl!newsfeed3.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail Message-ID: <51C35818.8070801@example.com> Date: Thu, 20 Jun 2013 21:29:28 +0200 From: Marc van Lieshout User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 MIME-Version: 1.0 Newsgroups: comp.lang.php To: The Natural Philosopher Subject: Re: Using a single php entry file for a whole site. References: In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Lines: 87 NNTP-Posting-Host: 2001:980:4910:1:3925:e19d:d4fc:f367 X-Trace: 1371756568 news.xs4all.nl 16011 [2001:980:4910:1:3925:e19d:d4fc:f367]:1291 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.php:9816 On 20-06-13 19:22, The Natural Philosopher wrote: > > What I would like to do, is the following. > > ALL request to a site are redirected by apache rules to one single file. > Let's call it index.php. > Index.php notes the URL the user wants and looks it up in a database, > and if it exists, includes() the actual PHP file for that page. > If it doesn't exist, a standard 'sorry, you are looking for a page that > doesn't exist' is returned, if possible with the correct error code in > the headers? > The php files themselves apart from index.php do NOT live under the web > root. They might in fact live in the database. But that's stage 2. > > Is this possible, and if so what if any are the downsides? > > It seems to me that a user or robot level scrape of the site would not > show anything of its true internal structure. But still show all the > paths through it. > > What I want to do is have stuff like > > http:/mysite.com/news/Dog-Bites-Man > > redirect to say > > /var/private/newspage.php?id=3041 > > where there exists a mysql table with a name value pair of > > news/Dog-Bites-Man: /var/private/newspage.php?id=3041 > or > menu/Contact-the-webmaster: /var/private/contact.php?target=webmaster > > and so on. > > And possible a field for keywords to search the site with. > That looks indeed like a small framework. Some remarks: 1. You don't need apache rewriting you can use $_SERVER['PATH_INFO'] and use url's like: http:/mysite.com/index.php/news/Dog-Bites-Man or a page controller: http:/mysite.com/index.php?site=%2Fnews%2FDog-Bites-Man 2. For the sake of security, put the part that accesses the DB outside of index.php. It contains an uid and a password. The scheme will be like this: in index.php: include "/path/ouside/webroot/dispatcher.php" in dispatcher.php: $conn = new PDO(....); $stmnt = $conn->prepare( 'SELECT target from dispatch WHERE source = :src'); $stmnt->execute(':src' => $_SERVER['PATH_INFO']); $row = $stmnt->fetch(PDO::FETCH_ASSOC); if ($row === false) // dispatch to 404 ; else include('/path/outside/webroot/' . $row['target']); That's all.