2010-10-17 2 views
0

Я не нашел ответа на свою текущую проблему.HTACCESS - заблокировать все, кроме указаний SEO дружественный URL

Вот корень сайта:

  • кэш
  • IMG
  • display.php
  • admin.php

Что мне нужно, чтобы блокировать все прямые доступ к файлам и разрешать доступ только через URL-адрес, отформатированный следующим образом:

1 ht * p: //sub.domain.com/image/param/size/folder/img.jpg (параметр, размер, папка, img - параметры)
2 ht * p: //sub.domain. ком/действие/param1/param2/(param1, param2 являются параметрами)

1 будет указывать на display.php с правильными параметрами
2 будет указывать на admin.php с правильными параметрами
Любой другой доступ должен быть 404 (в лучшем случае) или 403

мои правила имеют вид (Htaccess в ХТ * р: //sub.domain.com/):

RewriteRule ^image/([^/]+)/([0-9]+)/([^/]+)/([^/]+)\.jpg display.php?param=$1&size=$2&folder=$3&img=$4 [L] 
RewriteRule ^action/([^/]+)/([^/]+) admin.php?action=$1&param=$2 [L] 

Эти правила работают так, как я хочу, но я застрял на том, как заблокировать любой доступ, который не исходит от этого URL!

Также (в качестве бонуса) Я хотел был бы иметь возможность использовать тот же htaccess на различном веб-адресе, не изменяя этот файл.

Заранее спасибо

+0

Как заблокировать все запросы, в которых есть знак вопроса '?'? –

+0

Сделайте это на уровне PHP, иначе вы входите в рекурсивный ад. – Ben

ответ

0

Вы попробуйте переместить изображение из папки и использовать PHP для вызова изображения?

Для файлов PHP вы можете использовать оператор switch (http://www.php.net/switch).

Для файла admin.php вы можете сделать что-то вроде:

$get_action = $_GET['action']; 

switch ($get_action) { 
    case "edit": 
    case "view": 
    case "delete": 
    case "add": 
     //Continue loading the page 
     break; 
    default: 
     header('HTTP/1.1 403 Forbidden'); 
     die(); 
} 

Примечания: Я не знаю, как ваш код выглядит или работает, но вы можете иметь идею базу на коде, который я добавил.

Смежные вопросы