SSI + RewriteEngine

Очень часто для обработки запросов используют PHP скрипт с параметрами после "?" (знака вопроса). Это очень удобно для создания каталогов и ещё много чего. Позже придумали такую штуку как ЧПУ (SEF), для того чтобы в браузере некрасивые строки вида "/script.php?file.htm" заменять на примерно такие "/file/". Трудно переоценить эту возможность.  Сейчас же мы увидим как это реализовать средствами SSI + RewriteEngine.

Для теста нам понадобится создать 3 файла, с таким содержимым:

index.html - Файл со ссылкой на несуществующие папку/файл

<a href="test/anyfile/">test/anyfile/</a>

.htaccess - обработчик поведения сервера

Options -Indexes 
Options +FollowSymLinks

RewriteEngine On
RewriteCond %{REQUEST_URI} \/test\/
RewriteRule ^(.*)$ redirect.html?$1 [L]

redirect.html - скрипт решающий что делать

<!--#if expr="$QUERY_STRING=/anyfile/" --> 
Query OK 
<!--#else --> 
<!--#endif --> 
<br /> 
<a href="./../../">home</a>

В примере мы ссылаемся на папку "anyfile" в папке "test". Папка "test" является сигналом обработчику, для выполнения редиректа на скрипт. При этом папка "anyfile" отдаётся параметром скрипту, т.е. то что следует после "?" в скриптах на PHP.

Для обработки параметра в скрипте используеюся системная переменная QUERY_STRING, обрабатывая которую мы можем выполнять разные дествия, например INCLUDE.

Comments

Different
Different said: 27-03-’12 19:38

Забавно, хотя не понятно почему $QUERY_STRING>=anyfile

А каким образом распарсить QUERY_STRING?
Например, имеем: “uid=XXX&mode=YYY”

wakh
wakh said: 31-03-’12 12:04

я не силён в регекспах, поэтому сделал проверку которая работает :)
полноценный парсинг без PHP, CGI или JS наверно не сделать, да и зачем? для этого есть более удобные решения.
этот конкретный пример я планирую (пока руки не дошли) использовать, чтобы парсить однотипные файлы, подставляя в них разные, но похожие, данные.

Ап: поправил проверку на регэкповскую, теперь вроде кошерно

Leave a comment


Comment moderation is enabled on this site. This means that your comment will not be visible until it has been approved by an editor.