Question

It's possible via .htaccess send query to another file? A bit explaining:

index.php handle all pages like this:

switch($page) {
    case 'index':
        require_once START . '/includes/pages/index.php';
    break;

    case 'another':
        require_once START . '/includes/pages/another.php';
    break;
       and so on...

In .htaccess:

RewriteRule ^index$ index.php?page=index [L]
RewriteRule ^another$ index.php?page=another [L]

Links(eg. localhost/84ss7d41):

RewriteRule ^(.*)$ index.php?QUERY_STRING=$1 [L]

So in /includes/pages/index.php:

if ($_GET['QUERY_STRING']) {
$_SERVER['QUERY_STRING'] = $_GET['QUERY_STRING'];
$query_string = check_input($_SERVER['QUERY_STRING']);
    //checking/validating processing further...

How to make links like this one localhost/84ss7d41 work in same way as now, but without index.php ? I'm trying to seperate my "project" if something would happen (files accidentally deleted) checking/validating data would work same, without main script, it's like:

if (main project file index.php/ || /includes/pages/index.php doesn't exist) {
  check/validate data with reserve.php
}
Was it helpful?

Solution

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule ^(.*) /index.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*) /reserve.php [L]

This redirects all requests that do not match an existing file (for example, an image) to index.php, where you can then use $_SERVER["REQUEST_URI"] to decide how to act. This is an implementation of the Front Controller pattern http://en.wikipedia.org/wiki/Front_Controller_pattern

Additionally, if index.php cannot be found by apache, then the request will be forwarded to reserve.php

Although, building in this kind of redundancy is not necessarily the 'right' thing to do (what if reserve.php goes missing too?). Enforcing proper access controls over index.php is probably a better approach.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top