Запуск PHP без расширения без использования mod_rewrite? - PullRequest
12 голосов
/ 01 марта 2010

Используя Apache 2.2 и PHP 5, как лучше всего запустить PHP без расширения .php. Например, у меня есть скрипт с именем app.php, и мне нравится вызывать его как

http://example.com/app

Обратите внимание, что я все еще хочу сохранить расширение .php для файла, и у меня нет mod_rewrite. Я тоже не хочу использовать index.php, потому что он требует слишком много каталогов.

Я нашел один способ, добавив это в мой .htaccess,

AddHandler server-parsed .php
SetHandler application/x-httpd-php
AddHandler application/x-httpd-php .php

При использовании этой страницы страница работает немного медленнее. Я подозреваю, что он вызывает SSI на каждой странице PHP. Интересно, есть ли лучшие способы сделать это?

Ответы [ 3 ]

25 голосов
/ 01 марта 2010

Альтернативой является использование согласования содержимого . Включите многовидовые :

Options +MultiViews

Если именованный ресурс не существует, Apache выполнит поиск файла, затем отсортирует его по типу носителя и требованиям к кодировке содержимого, отправленным браузером. Если есть только один файл (ваш PHP-скрипт), то к этому разрешается URL.

7 голосов
/ 02 марта 2010

Вы также можете указать тип MIME для определенного файла в вашем .htaccess:

<Files app>
ForceType application/x-httpd-php
</Files>
0 голосов
/ 01 марта 2010

Короткий ответ: вы не сможете делать это так, как хотите. PHP будет требовать расширения SOME для запуска файлов, так что вы можете оставить его как * .php.

Если вы не используете mod_rewrite, вам придется вызывать файлы, используя полный файл и расширение.

В этом прелесть mod_rewrite - он позволяет вам делать именно такие вещи.

Я бы задал вам вопрос - почему вы не можете использовать mod_rewrite? Это проблема окружающей среды, выбор, используете ли вы Lighttpd (легкий)?

Extension

Оберните ваши правила перезаписи в нечто вроде этого, чтобы он не взорвался, если сервер не поддерживает mod_rewrite:

<IfModule mod_rewrite.c>
// DO REWREITE HERE
</IfModule>

Если вы считаете, что это проблема безопасности или что-то в равной степени обоснованное, вы можете также выполнить следующую проверку и отправить их в пользовательский 404 или даже в свою документацию и привести примеры того, как включить mod_rewrite, объяснить необходимость и т. Д. Эта вторая проверка не обязательна - если вы ее не используете, пользователи просто увидят расширение .php, но ваши страницы все равно должны работать.

<IfModule !mod_rewrite.c>
    ErrorDocument 404 /application/errors/404.php
    // ERROR 404 ABOVE OR DO ANOTHER DIRECT REDIRECT TO AN INFORMATION PAGE
</IfModule>
...