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