htaccess обратная директория

Можно ли htaccess искать определенный файл, связанный с URL-адресом, и вернуться на один шаг, если не найден?

Пример:

 / Пример / здесь / где / с

Htaccess выглядит, если «/ example / here / where / from» действительно является файлом какого-либо типа (/example/here/where/from.php), если это не удается, он возвращается на один шаг и проверяет, есть ли '/ example / here / где '- файл (/example/here/where.php) и т. д.

Если он должен был вернуться в дерево, предположите их как параметры, как в:

/example/here.php

$ _GET ['params'] = 'где / from';

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

Редактировать:

написание

Related of "htaccess обратная директория"

Это очень сложно, но вот код, который рекурсивно пересекает родительский каталог данного REQUEST_URI и поддерживает бесконечную глубину.

Включите mod_rewrite и .htaccess через httpd.conf а затем поместите этот код в свой .htaccess в каталоге DOCUMENT_ROOT :

 # Turn mod_rewrite on RewriteEngine On RewriteBase / # If the request is for a valid file RewriteCond %{REQUEST_FILENAME} -f [OR] # If the request is for a valid link RewriteCond %{REQUEST_FILENAME} -l # don't do anything RewriteRule ^ - [L] # if current ${REQUEST_URI}.php is not a file then # forward to the parent directory of current REQUEST_URI RewriteCond %{DOCUMENT_ROOT}/$1/$2.php !-f RewriteRule ^(.*?)/([^/]+)/?$ $1/ [L] # if current ${REQUEST_URI}.php is a valid file then # load it be removing optional trailing slash RewriteCond %{DOCUMENT_ROOT}/$1.php -f RewriteRule ^(.*?)/?$ $1.php [L] 

Объяснение:

Предположим, что исходный URI: /index/foo/bar/baz . Также предположим, что %{DOCUMENT_ROOT}/index.php существует, но никакие другие php-файлы не существуют в DOCUMENT_ROOT .

RewriteRule # 1 имеет регулярное выражение, которое прерывает текущий REQUEST_URI на 2 части:

  1. Все, кроме самого низкого subdir в $1 который будет index/foo/bar здесь
  2. Самый низкий subdir в $2 который будет baz здесь

RewriteCond проверяет, является ли %{DOCUMENT_ROOT}/$1/$2.php (что означает, что %{DOCUMENT_ROOT}/index/foo/bar/baz.php ) НЕ является допустимым файлом.

Если условие выполнено успешно, оно внутренне перенаправлено на $1/ которое является index/foo/bar/ здесь.

Логика RewriteRule # 1 повторяется снова, чтобы REQUEST_URI как (после каждой рекурсии):

  1. index/foo/bar/
  2. index/foo/
  3. index/

На данный момент RewriteCond не работает для правила №1, потому что существует ${DOCUMENT_ROOT}/index.php .

Мой RewriteRule # 2 говорит о $1.php на $1.php если %{DOCUMENT_ROOT}/$1.php является допустимым файлом. Обратите внимание, что RewriteRule # 2 имеет регулярное выражение, которое соответствует всем, кроме последнего косая черта, и помещает его в $1 . Это означает, что %{DOCUMENT_ROOT}/index.php является допустимым файлом (и это действительно так).

На этом этапе обработка mod_rewrite завершена, поскольку никакое дальнейшее правило не может быть запущено, так как после этого RewriteCond завершается с ошибкой, поэтому %{DOCUMENT_ROOT}/index.php должным образом обслуживается вашим веб-сервером Apache.