Настройка .htaccess

kpp

Новичок
Настройка .htaccess

PHP:
RewriteEngine On
RewriteBase '/'

#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_URI} !^/administrator/?$

   RewriteRule ^(([_A-Za-z0-9-]+/?)*([_A-Za-z0-9-]+))/?$ pager.php?n=$1
....................................
Все адреса не зависимо от того, существуют они физически или нет, перенаправляются в "pager.php?n=$1".
n - имя страницы в базе, а pager.php выводит эту страницу (по имени n).

Так же на диске много реальных адресов страниц, которые пересекаются и не пересекаются с именами, которые есть в базе (наличие в базе проверяется pager.php)

....................................

Необходимо как-то сначала пустить по адресу pager.php?n=имя_страницы , а потом, если страницы в базе нет, то получив "какой-то сигнал" Перейти на реальную страницу с таким именем. (Ну а уж если реальной нет, то просто вызовется ошибка 404)

-~{}~ 03.02.08 02:10:

---------------------------------------------------------------------------------

RewriteCond %{REQUEST_URI} ^/error/(.*)$
RewriteRule ^.*$ /%1 [R,L]

---------------------------------------------------------------------------------

Как проверить является ли директорией то, что подошло под шаблон, выделеный красным?
 

kpp

Новичок
Просто большая часть страниц, которые существуют физически создаются в админке и их адреса одинаковы. Старые директории переименовывать будет проблемотично. В каждой много вложенных файлов.

Например существует физически папка /downloads/2007/
В ней куча страниц .html и .php

В админке надо завести такую же страницу с тем же именем. /downloads/2007/ , не переименовывая старой.

В админке страницы будут создаваться типа /page/page1/..
без расширений .php , по-этому проблем с файлами нет, есть только с директориями.


Сейчас .htaccess выглядит так:

###################
PHP:
RewriteEngine On
RewriteBase '/'
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(([_A-Za-z0-9-]+/?)*([_A-Za-z0-9-]+))/?$ pager.php?n=$1
###################


Можно сделать так:
путь, не являющийся файлом переводится на pager.php?n=path/path/ , если страница существует в БД, то всё нормально, и скрипт её показывает, иначе скрипт посылает заголовок header("location:/error/path/path/"), путь начинающийся с последовательности букв /error/path/path/ не будет обрабатываться pager.php, а будет заменяться на /path/path/, и на этом действие mod_rewrit'а должны заканчиваться. Еслибы на этом всё заканчивалось, я был бы рад, но почему-то после преобразования из /error/path/path/ в /path/path/ действие mod_rewrit'а продолжаются!!! Написано [L] "last", но по мистическим причинам всё дело зацикливается, если страница не существует в базе данных или она не является файлом. То есть всё циклится именно на последнем правиле, хоть ставлю после него [L], хоть ставлю [R] )
###################
PHP:
RewriteEngine On
RewriteBase '/'

#RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/administrator/?$
RewriteCond %{REQUEST_URI} !^/error/(.*)$
RewriteRule ^(([_A-Za-z0-9-]+/?)*([_A-Za-z0-9-]+))/?$ pager.php?n=$1 [L]

##RewriteCond %{REQUEST_URI} ^/error/(.*)$
##RewriteRule ^.*$ /%1 [R,L]
#RewriteCond %1 -U
RewriteRule ^error/(.*)$ /$1 [L]
###################





Товарищи, спустя двое суток у меня появилась мегаидея, описывать её не буду, просто покажу .htaccess
Минус только в том, что в адресе реальной директории будет подставляться второй слэш в конце

###################
PHP:
RewriteEngine On
RewriteBase '/'
ErrorDocument 404 /404/

#RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/administrator/?$
RewriteCond %{REQUEST_URI} !^/error/(.*)$
RewriteRule ^(([_A-Za-z0-9-]+/?)*([_A-Za-z0-9-]+))/?$ pager.php?n=$1 [L]

RewriteRule ^error/(.*)$ /$1// [R]
###################
 
Сверху