Вот содержимое .htaccess:
Options -Indexes
RewriteEngine On
RewriteBase "/"
# Disallow direct access to PHP files.
RewriteRule ^(.*)\.php$ $1 [F,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(?<!common/dispatch\.php/)(.*)?$ common/dispatch.php/$1 [NS,L]
По сути, все мои страницы (файлы PHP) расположены так, как если бы они были для прямого доступа без mod_rewrite
, но у меня также есть dispatch.php
в каталоге с именем common
, через который я хочу направлять все запросы. так что я могу выполнить некоторую обработку перед выполнением скрипта страницы.
По сути, это та же идея, что и в большинстве фреймворков, за исключением того, что я хочу, чтобы иерархия страниц была на верхнем уровне, а скрипт отправки не использовался с некоторыми другими частями в своем собственном подкаталоге.
Этот скрипт отлично работает на моей машине для разработки (на которой PHP работает как mod_php
), но на рабочей машине он выдает ошибку, говорящую "Не указан входной файл". если работает под FCGI. При обычном CGI он работает по большей части, но если, например, я перехожу на /foo/bar
(с отсутствующим косым чертом) и /foo/bar
- это каталог в docroot, он отправляет меня на /foo/bar/?/foo/bar
. Остальная часть сценария работает нормально, но я не хочу, чтобы мои URI были искажены таким образом, и в идеале я хотел бы также иметь возможность использовать FCGI.
Потенциальное решение проблемы с FCGI, по-видимому, состоит в том, чтобы поместить соответствующий $1
в строку запроса (т.е. после ?
), но это вызывает все виды другого странного поведения, которое я не смог чинить. Есть ли простой способ исправить это?