Как мне заставить эту схему mod_rewrite работать с PHP как CGI / FCGI? - PullRequest
2 голосов
/ 01 августа 2011

Вот содержимое .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 в строку запроса (т.е. после ?), но это вызывает все виды другого странного поведения, которое я не смог чинить. Есть ли простой способ исправить это?

1 Ответ

0 голосов
/ 18 апреля 2012

Не проще ли использовать директиву auto_prepend_file в php?

...