Символическая ссылка на файл PHP не обрабатывается как PHP
У меня установлен PHP5 на сервере Ubuntu 14.04, и он работает нормально. Я создаю файл с именем foo.php в любом месте дерева документа, и он передается интерпретатору PHP, как и следовало ожидать.
Однако... Я не хочу, чтобы расширение.php было видно в одном конкретном случае, поэтому я создал символическую ссылку, используя "ln -s foo.php foo". Если я захожу на http://localhost/path/to/foo.php то PHP работает просто отлично, но когда я захожу на http://localhost/path/to/foo, я вижу исходный код PHP.
Я предполагаю, что это потому, что директивы SetHandler в /etc/apache2/mods-enabled/php5.conf находятся в <FilesMatch>
директива и мое имя файла не заканчивается на ".php", но у меня включена функция FollowSymlinks, поэтому я ожидал, что это не имеет значения. Я думаю, это так.
Я знаю, что мог бы использовать mod_rewrite для внутреннего перенаправления, но это немного кувалдой. Я также мог бы использовать Redirect, но это возвращает перенаправление клиенту, чего я хочу избежать.
Так есть ли простой способ сказать Apache: "перейдите по символической ссылке, а затем выполните автоматическое определение типа на основе найденного файла"?
1 ответ
Глядя на http://httpd.apache.org/docs/2.4/mod/core.html он говорит
Несмотря на то, что сервер следует по символической ссылке, он не меняет путь, используемый для сопоставления с
<Directory>
разделы.
Я думаю, что то же самое верно для сопоставления с <Files>
разделы, так что это не может быть сделано. Тем не менее, это близко:-
<Location "/path/to/foo">
SetHandler x-foo-handler
Action x-foo-handler /path/to/foo.php virtual
</Location>